请教一个数学求和问题(100分)

  • 主题发起人 主题发起人 maodw76
  • 开始时间 开始时间
M

maodw76

Unregistered / Unconfirmed
GUEST, unregistred user!
在1-33个几个数中,给出6个不重复的数使得6个数的和为指定的值,列出所有的这6个数的可能
急!!!!!
 
循环做?
也太晕了
关注
 
肯定用循环最容易做啊,效率应该也是满高的,每次循环最多就是 33*32*31*30*29*28 次,再配合条件,减少一些无用功,
var i,j,k,l,m,n:integer;
e:integer;
begin
e:=xxxx;
for i:=1 to 28do
begin
if i>=e then
break;
for j:=i to 29do
begin
if i+j>=e then
break;
for k:=j to 30do
begin
if i+j+k>=e then
break;
for l:=k to 31do
begin
if i+j+k+l>=e then
break;
for m:=l to 32do
begin
if i+j+k+l+m>=e then
break;
for n:=m to 33do
begin
if i+j+k+l+m+n>e then
break;
if i+j+k+l+m+n=e then
begin
//显示i j k l m n
end;
end;
end;
end;
end;
end;
end;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
var
i, z: integer;
Str: string;
listx: Tstringlist;
begin
listx := Tstringlist.Create;
try
i := 0;
while i < 7do
begin
Randomize;
Str := Format('%.2d', [Random(32) + 1]);
if listx.IndexOf(Str) = -1 then
begin
listx.Add(Str);
inc(i);
end;
end;
listx.Sort;
z:=0;
for i := 0 to 6do
z := z + StrToIntDef(listx.Strings, 0);
listx.Add('总和:' + IntToStr(z));
finally
ListBox1.Items.Assign(listx);
listx.Free;
end;

end;
 
多人接受答案了。
 
后退
顶部