重金求一算法及代码。(300分)

  • 主题发起人 主题发起人 ufolink
  • 开始时间 开始时间
U

ufolink

Unregistered / Unconfirmed
GUEST, unregistred user!
已知:
A,B,C,D,E,F,G 为每位的号码。
求不重复7位号码的组合及代码。
 
function f300:string;
const str='ABCDEFG';
var i,j,nn:integer;
mark:boolean;
tmp,t2:string;
begin
Randomize;
i:=1;
tmp:='';
Repeat
nn:=Random(7);
mark:=false;
for j:=1 to length(tmp) do
if tmp[j]=Inttostr(nn) then
mark:=true;
if mark=false then
begin
tmp:=tmp+inttostr(nn);
i:=i+1;
end;
Until i>7;
setlength(t2,7);
for i:=1 to 7 do
t2:=str[strtoint(tmp)+1];
Result:=t2;
end;
 
出来了!
procedure MySort(Var ListResult:TStringList);
var
i,i1,i2,i3,i4,i5,i6:SHORT;
TempStr,ResultStr,Sample1,Sample2,Sample3,Sample4,Sample5,Sample6,Sample7:string;
Const
Sample='ABCDEFG';
begin
ListResult.Clear;
SetLength(TempStr,7);
Sample1:=Sample;
for i1:= 1 to 7 do
begin
TempStr[1]:=Sample1[i1];
Sample2:=copy(Sample1,1,pos(TempStr[1],Sample1)-1)+copy(Sample1,pos(TempStr[1],Sample1)+1,255);
for i2:= 1 to 6 do
begin
TempStr[2]:=Sample2[i2];
Sample3:=copy(Sample2,1,pos(TempStr[2],Sample2)-1)+copy(Sample2,pos(TempStr[2],Sample2)+1,255);
for i3:= 1 to 5 do
begin
TempStr[3]:=Sample3[i3];
Sample4:=copy(Sample3,1,pos(TempStr[3],Sample3)-1)+copy(Sample3,pos(TempStr[3],Sample3)+1,255);
for i4:= 1 to 4 do
begin
TempStr[4]:=Sample4[i4];
Sample5:=copy(Sample4,1,pos(TempStr[4],Sample4)-1)+copy(Sample4,pos(TempStr[4],Sample4)+1,255);
for i5:= 1 to 3 do
begin
TempStr[5]:=Sample5[i5];
Sample6:=copy(Sample5,1,pos(TempStr[5],Sample5)-1)+copy(Sample5,pos(TempStr[5],Sample5)+1,255);
for i6:= 1 to 2 do
begin
TempStr[6]:=Sample6[i6];
Sample7:=copy(Sample6,1,pos(TempStr[6],Sample6)-1)+copy(Sample6,pos(TempStr[6],Sample6)+1,255);
TempStr[7]:=Sample7[1];
ListResult.Add(TempStr);
end;
end;
end;
end;
end;
end;
end;
//调用方法
procedure TForm1.Button1Click(Sender: TObject);
var
MyList:TStringList;
begin
MyList:=TStringList.Create;
try
MySort(MyList);
MyList.SaveToFile('d:/Test.txt');
finally
MyList.Free;
end;
end;
 
等等!你要的是所有排列还是随机一个排列?
我的是所有排列。
白河愁的是随机一个排列。
 
不知道你的不重复是AABBCCDDE不能重复还是这样的不能重复:ABCDEFG--GFEDCBA--ACDBEGF...?
 
你是不是想编个算彩标号码之类的东东?[:D]
 
code浓于水,我只有五点可用分了,可怜可怜我吧。
 
你能把意图说明白点吗?
 
你的意思表达不清楚,还问什么问呀?
先问问你自已,怎样表达清楚吧!
 
高程教材p489有这个算法的穷举发
p493有这个算法的递归法
呵呵,自己看看吧,不算是很烦
 
对位数进行排列组合,再用数组对产生的东西记录一下,下一次产生的时候再去找。
 
是想编个算彩标号码之类的东东
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
900
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部