日期:2014-05-18  浏览次数:20447 次

請大家幫忙給出一個算法
請大家幫忙給出一個算法
下面是問題.....
有一組數據   1,2,4,8,16.........它的數據規則是後一個數字是前一個數字的2倍

現在我知道一個   數字   並且知道這個   數字   是由幾個數字組成的

請大家幫忙有沒有一個算法可以找出這個數字是由那幾個數字組成的.

例如       我知道數字28       我知道是由   3個數字組成
那我怎麼算出     是那幾個數字組成了28呢?

提示:這個數字一定是來自這一組數據其中幾個數字的和.

------解决方案--------------------
好像,由幾個數字相加是定的
declare @a int,@m int,@r int
select @a=28,@m=0,@r=1

while @a> 1
begin
while @r> 0
begin
if power(2,@m)> @a
set @r=0
else
set @m=@m+1
end

print power(2,@m-1)
set @a=@a-power(2,@m-1)
select @r=1,@m=0
end
if @a> 0
print @a

/*
16
8
4
*/

--可以試@a=900,@a=30,@a=57,@a=23
/* @a=900
512
256
128
4
*/

/*@a=30
16
8
4
2
*/

/*@a=57
32
16
8
1
*/
------解决方案--------------------
因為數列 An=2^n
An> Sn-1 即(An=1+Sn-1)
所以,一個數,等於多少個數相加,應該是定的