永发信息网

找算法高手帮忙解决一个编程列举数问题

答案:2  悬赏:50  手机版
解决时间 2021-07-29 04:46
  • 提问者网友:末路
  • 2021-07-28 13:39

一共是6位数 000000 。

第一位有:5,7,3

第二位有:14,13,12,12

三位:23,24,23

四位:35,32,31,32,33

五位:43,44,45,42

六位:53,54,51,52

这样固定的数字,怎么编程实现所有数的组合?

如:5 14 23 35 43 53 和 5 14 23 35 42 54这种。

要求列举出所有不同组合,但每位上的数是规定好的。最好是DELPHI代码,谢谢

满意再送200分,急~!

比如:

最佳答案
  • 五星知识达人网友:深街酒徒
  • 2021-07-28 14:31

看似复杂,本质上就是按次序进行枚举输出;因为同一位上相同的数字形成的组合必定与以前的重复,所以直接去掉它。在delphi7新建一个窗体,放上一个Button1和Label1,在Button1上双击,放入一下代码即可实现功能。注意:机器如果配置不高,可能需要花费十几秒钟枚举所有组合!


procedure TForm1.Button1Click(Sender: TObject);
var
a:Array [0..2] of integer;
b:Array [0..2] of integer;
c:Array [0..1] of integer;
d:Array [0..3] of integer;
e:Array [0..3] of integer;
f:Array [0..3] of integer;
ai,bi,ci,di,ei,fi:integer;
begin
a[0]:=5;a[1]:=7;a[2]:=3;
b[0]:=14;b[1]:=13;b[2]:=12;
c[0]:=23;c[1]:=24;
d[0]:=35;d[1]:=32;d[2]:=31;d[3]:=33;
e[0]:=43;e[1]:=44;e[2]:=45;e[3]:=42;
f[0]:=53;f[1]:=54;f[2]:=51;f[3]:=52;
for ai:=0 to 2 do
for bi:=0 to 2 do
for ci:=0 to 1 do
for di:=0 to 3 do
for ei:=0 to 3 do
for fi:=0 to 3 do
Label1.Caption:=Label1.Caption+char(vk_return)+IntToStr(a[ai])+' '+IntToStr(b[bi])+' '+IntToStr(c[ci])+' '+IntToStr(d[di])+' '+IntToStr(e[ei])+' '+IntToStr(f[fi]);
next;
next;
next;
next;
next;
next;
end;

全部回答
  • 1楼网友:怀裏藏嬌
  • 2021-07-28 15:00

不会delphi,不过看到label1.caption=label1.caption+.......,这样会影响速度。最好先用一个简单变量存储,全部循环完成后再把变量赋给label1.caption,速度会明显提升。

我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯