<<<<請大家幫忙給出一個算法>>>^^ ( 积分: 20 )

  • 主题发起人 主题发起人 liulei_1126
  • 开始时间 开始时间
L

liulei_1126

Unregistered / Unconfirmed
GUEST, unregistred user!
請大家幫忙給出一個算法
下面是問題.....
有一組數據 1,2,4,8,16.........它的數據規則是後一個數字是前一個數字的2倍
現在我知道一個 數字 並且知道這個 數字 是由幾個數字組成的
請大家幫忙有沒有一個算法可以找出這個數字是由那幾個數字組成的.
例如 我知道數字28 我知道是由 3個數字組成
那我怎麼算出 是那幾個數字組成了28呢?
提示:這個數字一定是來自這一組數據其中幾個數字的和.

你好謝謝你的關注
我拿例子來說這樣直觀些
例如 我知道數字28 這個數字28我知道是由 3 個數字組成 而這三個數字都來自
1,2,4,8,16......這個數組中
我現在要知道 具體是由那三個數字.
 
如果是 1、2、4、8 数列,用除2取余转成2进制一看就知道了
28 / 2 = 14 0 1
14 / 2 = 7 0 2
7 / 2 = 3 1 4
3 / 2 = 1 1 8
1 / 2 = 0 1 16
28 = 0001 1100
 
晕, 你没表达清楚吧。 28怎么可能是三个数字组成呢? 跟那个数组有嘛关系呢?
 
這三個數字 4,8,16 來自 這個數組
 
雖然沒答案
 
没有答案?!真怀疑你的理解能力,建议你不要搞计算机了
 
算法如下:
type
DataArray = array of Integer;
Function Par(Num, N : Integer): DataArray;
var
I,R : Integer;
begin
SetLength(Result,N);
R := 0;
for I := 0 to N-1do
R := R + (1 shl I);
R := Num div R;
for I := 0 to N-1do
Result := (1 shl I)*R;
end;

调用方式如下:
procedure TForm1.Button1Click(Sender: TObject);
var
I : Integer;
D : DataArray;
S : String;
begin
D := Par(16, 3);
for I := Low(D) to High(D)do
S := S + ' ' + IntToStr(D);
ShowMessage(S);
end;
 
后退
顶部