关闭

【转载】有序拆分

165人阅读 评论(0) 收藏 举报
分类:
var
  top,j,n,m:integer;
   s:array[0..100] of integer;
Procedure print;
Var i:integer;
 begin
    if  top>1 then
       begin  write(n,'=',s[1]);
              for  i:=2  to  top  do  write('+',s[i]);
             writeln;
        end;
 end;

Function sum(top:integer):integer;
 Var i,t:integer;
   begin
       t:=0;
     for i:=1 to top do t:=t+s[i];
     //sum:=t;
   exit(t);
   end;

Function cr(top:integer):boolean;
 Var i:integer;
  begin
   cr:=true;
   for i:=1 to top-1 do
   if s[i]>s[i+1] then cr:=false;
  end;
begin
fillchar(s,sizeof(s),0);
read(n);
top:=1;
repeat
inc(s[top]);  m:=sum(top);
if m<=n then
     if (m=n)  and cr(top)  then  print
                            else  inc(top)
else  begin  s[top]:=0; dec(top); end;
until top=0;
end.

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:16096次
    • 积分:118
    • 等级:
    • 排名:千里之外
    • 原创:91篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章分类
    文章存档