主题:一道难题
chinastar
[专家分:0] 发布于 2005-03-25 21:30:00
输入一个数,将其无序拆分成几个自然数之和,打印出所有可能。
例子:4=1+1+1+1=1+1+2=1+2+1=2+1+1=1+3=3+1
回复列表 (共9个回复)
沙发
xuzhenyi [专家分:850] 发布于 2005-03-26 20:56:00
好难
有固定的几个数就超简单了
板凳
faintzw [专家分:2660] 发布于 2005-03-26 20:59:00
楼上说的好笑……
如果这个数是100000,要求分成1000份呢?
最基本的回溯了……
3 楼
xuzhenyi [专家分:850] 发布于 2005-03-31 21:37:00
好像是也
4 楼
xuzhenyi [专家分:850] 发布于 2005-03-31 22:26:00
我也想知道程序 请你贴出来好吗 谢谢
5 楼
xuzhenyi [专家分:850] 发布于 2005-04-04 20:05:00
你做不来就别狂
基本
你倒是贴出来啊
6 楼
hs3180 [专家分:530] 发布于 2005-04-05 08:56:00
既然无序,那么有1+3就没有3+1
var
a:array[1..1000]of longint;
n,b:longint;
procedure print;
var
i:longint;
begin
for i:=y downto b do write(a[i],'' '');
writeln;
end;
procedure try(x,y:longint);
var
i:longint;
begin
if (x=0)and(x<>n) then begin b:=y+1;print;exit;end;
for i:=1 to x do begin
a[y]:=i;
try(x-i,y-1);
end;
end;
begin
readln(n);
try(n,n);
end.
7 楼
风清书阳 [专家分:60] 发布于 2005-04-05 19:12:00
这种程序可能要用回溯吧~!
8 楼
xuzhenyi [专家分:850] 发布于 2005-04-05 19:19:00
6楼真厉害
9 楼
faintzw [专家分:2660] 发布于 2005-04-05 22:50:00
汗
知道算法了还做不出来的话才搞笑……
搜索是最基本却很万能的算法……虽然时间复杂度一般不低
我来回复