给一个数N,算出有多少种组合可以使组合的数加起来的和等于这个数,组合中的数字可以重复,但是排序是有顺序的,就是说不同的排序顺序也算一种组合
例如:4有以下几种组合
1 1 1 1
1 1 2 0
1 2 1 0
1 3 0 0
2 1 1 0
2 2 0 0
3 1 0 0
4 0 0 0求如何用程序得到N个数时的这个数组
例如:4有以下几种组合
1 1 1 1
1 1 2 0
1 2 1 0
1 3 0 0
2 1 1 0
2 2 0 0
3 1 0 0
4 0 0 0求如何用程序得到N个数时的这个数组
i,j, k,g,s : integer;
begin
for i := 0 to 4 do
begin
for j := 0 to 4 do
begin
for k := 0 to 4 do
begin
for g := 0 to 4 do
begin
if (i+j+k+g) = 4 then
Self.Memo1.Lines.Add(IntToStr(i)+IntToStr(j)+IntToStr(k)+IntToStr(g))
end;
end;
end;
end;
end;
0004
0013
0022
0031
0040
0103
0112
0121
0130
0202
0211
0220
0301
0310
0400
1003
1012
1021
1030
1102
1111
1120
1201
1210
1300
2002
2011
2020
2101
2110
2200
3001
3010
3100
4000
这是运行结果
len:=4
//定义数组
function get(n,l)
for i:=0 to n do
begin
a(l) := i;
if l==1 then
begin
sum:=0
for j:=1 to len do
begin
sum:=sum+a(j)
end;
if sum==n then
//添加
end
else
get(n,l-1)
end;
end functionget(num,l)
好久不写对语法不熟了.
就是用递归来实现,用一个全局的数组保存每层递归的一个录入数.
1、在最深层判断当前len个数加起来,是否等于num等则输出,不等则不输出。判断完最深层退回一次。
2、递进后再深入...
3、重复1
4、直到判断完