【转载】有序拆分

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值