var Datas , OutDatas : array of integer; OutStringList : array of String; //显示使用procedure ImulAll; var i , n , nCount : integer; begin n := 1; SetLength(Datas , Trunc(SQRT(1000))); nCount := 0; for i:=0 to High(Datas) do begin n := n * (i+1); if n>1000 then Break; Datas[i] := n; inc(nCount); end; SetLength(Datas , nCount); end;procedure GetNeedInt; Type T32BitSet = 0..31; T32BitSetOf = set of T32BitSet; P32BitSetOf = ^T32BitSetOf; var n , Sum , nInc : integer; i , D , k : integer; S : String; //显示使用 begin n := Length(Datas); if n=0 then exit; D := $FFFFFFFF SHR (32 - n); for i:=1 to D do begin Sum := 0; nInc := 0; S := ''; //显示使用 for k:=0 to n-1 do begin if k in P32BitSetOf(@i)^ then begin Sum := Sum + Datas[k]; inc(nInc); S := S + IntToStr(k+1) + '! + '; //显示使用 end; end; if (nInc>=2) then begin SetLength(OutDatas , Length(OutDatas)+1); OutDatas[High(OutDatas)] := Sum; SetLength(OutStringList , Length(OutStringList)+1); //显示使用 OutStringList[High(OutStringList)] := Copy(S , 1 , Length(S) - 2); //显示使用 end; end; end;procedure TForm1.Button2Click(Sender: TObject); var i : integer; begin ImulAll; GetNeedInt; for i:=0 to High(OutDatas) do Memo2.Lines.Add(IntToStr(OutDatas[i]) + '=' + OutStringList[i]); end;
kiboisme今天做题好生猛,赞一个!
我也是在C区看到的。楼主也是放了鸽子了。 http://topic.csdn.net/u/20120301/12/2a9f54d0-6d2b-498e-8c97-770ffcc46a8d.html 看看我的PASCAL代码 function fib(n:Integer):Integer; begin if n>=1 then result :=fib(n-1)*n else Result :=1; end;function nfib(n:Integer):Integer; begin if n>=10 then Result :=nfib(n div 10)+fib(n mod 10) else Result :=fib(n); end;procedure TForm1.Button1Click(Sender: TObject); var i: Integer; begin Memo1.Lines.Clear; for i := 1 to 1000 do if nfib(i)=i then Memo1.Lines.Add(IntToStr(i)); end;end.
var
Datas , OutDatas : array of integer;
OutStringList : array of String; //显示使用procedure ImulAll;
var
i , n , nCount : integer;
begin
n := 1;
SetLength(Datas , Trunc(SQRT(1000)));
nCount := 0;
for i:=0 to High(Datas) do begin
n := n * (i+1);
if n>1000 then Break;
Datas[i] := n;
inc(nCount);
end;
SetLength(Datas , nCount);
end;procedure GetNeedInt;
Type
T32BitSet = 0..31;
T32BitSetOf = set of T32BitSet;
P32BitSetOf = ^T32BitSetOf;
var
n , Sum , nInc : integer;
i , D , k : integer;
S : String; //显示使用
begin
n := Length(Datas);
if n=0 then exit;
D := $FFFFFFFF SHR (32 - n);
for i:=1 to D do begin
Sum := 0;
nInc := 0;
S := ''; //显示使用
for k:=0 to n-1 do begin
if k in P32BitSetOf(@i)^ then begin
Sum := Sum + Datas[k];
inc(nInc);
S := S + IntToStr(k+1) + '! + '; //显示使用
end;
end;
if (nInc>=2) then begin
SetLength(OutDatas , Length(OutDatas)+1);
OutDatas[High(OutDatas)] := Sum;
SetLength(OutStringList , Length(OutStringList)+1); //显示使用
OutStringList[High(OutStringList)] := Copy(S , 1 , Length(S) - 2); //显示使用
end;
end;
end;procedure TForm1.Button2Click(Sender: TObject);
var
i : integer;
begin
ImulAll;
GetNeedInt;
for i:=0 to High(OutDatas) do
Memo2.Lines.Add(IntToStr(OutDatas[i]) + '=' + OutStringList[i]);
end;
我也是在C区看到的。楼主也是放了鸽子了。
http://topic.csdn.net/u/20120301/12/2a9f54d0-6d2b-498e-8c97-770ffcc46a8d.html
看看我的PASCAL代码
function fib(n:Integer):Integer;
begin
if n>=1 then
result :=fib(n-1)*n
else
Result :=1;
end;function nfib(n:Integer):Integer;
begin
if n>=10 then
Result :=nfib(n div 10)+fib(n mod 10)
else
Result :=fib(n);
end;procedure TForm1.Button1Click(Sender: TObject);
var
i: Integer;
begin
Memo1.Lines.Clear;
for i := 1 to 1000 do
if nfib(i)=i then
Memo1.Lines.Add(IntToStr(i));
end;end.