主题:关于数字拆分(数学很浓)
问题描述:120以内的数,拆分成n个自然数的和,求n的个数,要求用过程实现
我这儿的一种做法不是很明白,望高人指点,如果有其他方法,请不吝赐教
(n是自然数,c存放个数变量)
var n:byte;c:longint;
function min(x,y:integer):integer; {定义取两数种小些的数的函数}
begin
if x<y then min:=x else min:=y;
end;
procedure work(sy,kc:byte);
var i:byte;
begin
for i:=min(sy,kc) downto 1 do {此处甚难理解}
if i=sy then c:=c+1 else work(sy-i,i);
end;
begin
readln(n);
work(n,n);
writeln(c);
end.
我这儿的一种做法不是很明白,望高人指点,如果有其他方法,请不吝赐教
(n是自然数,c存放个数变量)
var n:byte;c:longint;
function min(x,y:integer):integer; {定义取两数种小些的数的函数}
begin
if x<y then min:=x else min:=y;
end;
procedure work(sy,kc:byte);
var i:byte;
begin
for i:=min(sy,kc) downto 1 do {此处甚难理解}
if i=sy then c:=c+1 else work(sy-i,i);
end;
begin
readln(n);
work(n,n);
writeln(c);
end.