主题:关于拆分的一道题目
5lemon
[专家分:0] 发布于 2006-09-23 15:18:00
任何一个大于1的自然数,总可以拆分成若干个小于N的自然数之和.
例:N:3
3=1+2
3=1+1+1
具体应怎么做,望赐教,本人不才!
回复列表 (共2个回复)
沙发
小田甜 [专家分:3910] 发布于 2006-09-24 17:52:00
递归.
func d(n,t:int):long.
i:int
m:long
{
if n=1 then m=1 else {
m=0
for i=1->t if i<=n div 2 then m+=d(n-i,i)
}
}
板凳
lgr7000 [专家分:230] 发布于 2006-09-24 21:47:00
var
i,n,p,an:integer;
s:array[1..100] of integer;
begin
readln(n);
s[1]:=1; p:=1; an:=1;
while p>0 do
begin
while an<n do begin p:=p+1; s[p]:=s[p-1]; an:=an+s[p]; end;
if an=n then
begin
for i:=1 to p do write(s[i],' ');
writeln;
end;
an:=an-s[p]; p:=p-1;
while (p>0)and(s[p]=n-1) do begin an:=an-s[p]; p:=p-1; end;
if p>0 then begin an:=an+1; s[p]:=s[p]+1; end;
end;
end.
我来回复