回 帖 发 新 帖 刷新版面

主题:一道难题

输入一个数,将其无序拆分成几个自然数之和,打印出所有可能。
例子:4=1+1+1+1=1+1+2=1+2+1=2+1+1=1+3=3+1

回复列表 (共9个回复)

沙发

好难
有固定的几个数就超简单了

板凳

楼上说的好笑……
如果这个数是100000,要求分成1000份呢?

最基本的回溯了……

3 楼

好像是也

4 楼

我也想知道程序 请你贴出来好吗 谢谢

5 楼

你做不来就别狂
基本
你倒是贴出来啊

6 楼

既然无序,那么有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 楼

这种程序可能要用回溯吧~!

8 楼

6楼真厉害

9 楼


知道算法了还做不出来的话才搞笑……
搜索是最基本却很万能的算法……虽然时间复杂度一般不低

我来回复

您尚未登录,请登录后再回复。点此登录或注册