作业帮 > 综合 > 作业

数的拆分 pascal

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/30 15:31:27
数的拆分 pascal
数的拆分(snumber.pas)
【问题描述】
对于正整数 n ,输出其和等于 n 且满足以下限制条件的所有正整数的和式,以及和式的总数.组成和式的数字自左至右构成一个非递增的序列.
如n=4,程序输出为:
4=4
4=3+1
4=2+2
4=2+1+1
4=1+1+1+1
5
【输入文件】
输入文件snumber.in仅一行,该行只有一个正整数n(1≤n≤50).
【输出文件】
输出文件snumber.out包含若干行,最后一行输出和式的数目,除此之外,前面每一行输出一个和式,组成和式的数字自左至右构成一个非递增的序列,不同行的和式先按照等号右边的第一个数字降序排列,若第一个数字相同,则按第二个数字降序排列,依此类推,直到输出所有和式为止.
【输入样例】
5
【输出样例】
5=5
5=4+1
5=3+2
5=3+1+1
5=2+2+1
5=2+1+1+1
5=1+1+1+1+1
7
program snumber;
var
n,count:longint;
a:array [1..10000] of longint;
procedure print(k:longint);
var
i:longint;
begin
write(n,'=');
for i:=1 to k-1 do
write(a[i],'+');
writeln(a[k]);
end;
procedure dfs(k,ans,c:longint);
var
i:longint;
begin
if ans>n then exit;
if ans=n then begin inc(count);print(c-1);exit; end;
for i:=k downto 1 do
begin
a[c]:=i;
dfs(i,ans+i,c+1);
end;
end;
begin
readln(n);
dfs(n,0,1);
write(count);
end.
程序还是要自己打的好····
但是还是希望采纳~~~
不然没积分就成穷鬼了····