请问任意一组数字的所有可能求和问题(100分)

  • 主题发起人 主题发起人 pjessica
  • 开始时间 开始时间
P

pjessica

Unregistered / Unconfirmed
GUEST, unregistred user!
比如有一组数字,例如7个,但个数不确定
要分别求出所有的任意两个数字相加的结果,任意3个数字,4,5,6,7个数字相加的结果
想知道详细的算法,最好写出源代码
急用,多谢。
 
一个一个加吧,没什么好的办法
 
关键是怎么循环呀,数据结构学的不好
现在又急用:)
 
排列組合
7:所有加
6:去掉一個
5與2:。。。
3與4:。。。
 
//先解释一下你的题目:
有一组数字,有n个A[1]..A[n],求任取x个的所有可能结果。
将可能的结果集存放到Tstringlist中。
//解法如下:
如果x=2,则2层循环。
for i:=1 to ndo
begin
for j:=2 to ndo
begin
if i=j then
continue;
abc:=a+a[j]
StringList.add(abc);//把可能结果加入到结果集。
end;

end;
如果x=3,则3层循环。
for i:=1 to ndo
begin
for j:=2 to ndo
begin
for k:=3 to ndo
begin
if (i=j) or (i=k) or (j=k) then
continue;//相加的元素不能重复了。
abc:=a+a[j]
StringList.add(abc);//把可能结果加入到结果集。
end;
end;

end;

如些类推,任取x个数,循环的层数=x
 
var
a: array [1..7] of integer;
i,j,k: integer;
begin
for i:=1 to 5do
for j:=i+1 to 6do
for k:=j+1 to 7do
showmessage(inttostr(a+a[j]+a[k]));
end;
你试试 看是否全列完了 是否有重复的
 

思路比较简单,假设七个
取第一个,循环回余下六个;
取第二个,循环回余下五个;
...
 
其实就是按顺序排列
 
我不改这里了,你看我写在上面的答案吧。
 
可能我的表述不清晰,是7个数字里面的任意组合,要有两个数字相加,三个数字相加,四个数字到7个数字相加的所有组合。
 
var
num:array of integer;
....
procedure Tform1.zhSum(n, m: integer);
var
a: array of integer;
i, j,sum: integer;
r: longword;
hm: string;
begin
i := 0;
r := 0;
SetLength(a,n);
a := 1;
while truedo
begin
if (a - i <= n - m + 1) then
begin
if (i = m - 1) then
begin
inc(r);
hm := IntToStr(r) + ':';
sum:=0;
for j := 0 to m - 1do
if j < m - 1 then
sum := sum + Num[a[j]-1]
else
sum := sum + Num[a[j]-1];
RichEdit1.Lines.Add(IntToStr(sum));
a := a + 1;
continue;
end;
inc(i);
a := a[i - 1] + 1;
end
else
begin
if (i = 0) then
exit;
dec(i);
a := a + 1;
end;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
i,sum:integer;
begin
SetLength(Num,SpinEdit1.value);
for i:=0 to SpinEdit1.value-1do
Num:=i+2;
//对数组赋值
for i:=2 to SpinEdit1.valuedo

zhSum(SpinEdit1.value,i);
end;
 
多人接受答案了。
 
后退
顶部