首页 新闻 会员 周边 捐助

根据一个数找是哪些特定数据相加的算法

0
悬赏园豆:180 [已解决问题] 解决于 2010-05-12 15:23

已知一组数据 1 2 4 8 16 32 64 128 256 。。。。 2^(n-1)

已知一个数      比如3  我就能找到 1 2

                           7  我就能找到 1 2 4

                           6  我就能找到    2 4

                           8  我就能找到    8

 已知的这个数是    是数组中 1 2 4 8 16。。。。。 中某几个数据相加得到的结果

半调子的主页 半调子 | 初学一级 | 园豆:10
提问于:2010-05-12 10:41
< >
分享
最佳答案
0

由于你这个数组是2的n次幂的序列,所以这个算法就比较好设计,因为所有的数在计算机中都是以二进制来存取的,只要把二进制各个位的数找到就可以了。看下面我写的程序

static void Parse(uint number)
{
uint bit = 1;

Console.WriteLine(
"Number:" + number);

for (int i = 0; i < 32; i++)
{
if ((number & bit) != 0)
{
Console.WriteLine(Math.Pow(
2, i));
}

bit
<<= 1;
}
}

执行

          Parse(3);
          Parse(7);
          Parse(6);
          Parse(8);

结果

Number:3
1
2
Number:7
1
2
4
Number:6
2
4
Number:8
8

收获园豆:180
eaglet | 专家六级 |园豆:17139 | 2010-05-12 11:41
牛人
千羽 | 园豆:666 (小虾三级) | 2010-05-12 15:12
开眼界了哈 超级牛B呀
半调子 | 园豆:10 (初学一级) | 2010-05-12 15:20
本想晚上回家写,没想到....牛。
Astar | 园豆:40805 (高人七级) | 2010-05-12 15:32
很容易找的规律(其实提问题的人已经找出规律了2^(n-1))
HelloMain | 园豆:210 (菜鸟二级) | 2010-05-14 11:56
其他回答(1)
0

先找规律,再写程序。比如,一个数是 8,那么就对上一个数字(8/2)之前的所有数字进行循环。这道题主要考的是数学。

周巍 | 园豆:735 (小虾三级) | 2010-05-12 10:57
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册