100分求和为某个数N的数据组合的问题

wintergoes 2008-03-24 02:46:20
给一个数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个数时的这个数组
...全文
176 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
myvicy 2008-03-24
  • 打赏
  • 举报
回复
描述了一下算法希望对你有帮助。
myvicy 2008-03-24
  • 打赏
  • 举报
回复
num:=9
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 function

get(num,l)
好久不写对语法不熟了.
就是用递归来实现,用一个全局的数组保存每层递归的一个录入数.
1、在最深层判断当前len个数加起来,是否等于num等则输出,不等则不输出。判断完最深层退回一次。
2、递进后再深入...
3、重复1
4、直到判断完
sanguomi 2008-03-24
  • 打赏
  • 举报
回复
是的,你得限制长度,
限制了长度了,你把那个具体数改成变量传进去不就可以了
wintergoes 2008-03-24
  • 打赏
  • 举报
回复
哦,长度就是限制为N,比如4最长的情况是4个1,所以长度限制为4。

对了,不是最长限制为4,是长度就是4,不如果比这个长度短的数组。
散乱心绪 2008-03-24
  • 打赏
  • 举报
回复
你的数的长度是多少。

没限制长度没法做的,比如 4
4
40
400
4000
40000
400000....
wintergoes 2008-03-24
  • 打赏
  • 举报
回复
我要的是N个数的情况,不是某个具体数的算法。
sanguomi 2008-03-24
  • 打赏
  • 举报
回复
var
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
这是运行结果

16,747

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧