大家好:
最近正在写一个33选6的程序,要求就是把1~33个数按无重复排。但是不知道为什么写出来的内容老是有不对的,而且速度非常的慢,现在把我写的程序拿出来,大家帮助看一看,
procedure TForm_dict.FillText ;
var
aa:array[1..33] of string;
i,i1,i2,i3,i4,i5,i6:integer;
m,n,l:integer;
Ts:TStringList;
begin
l:=0;
n:=1;
for m:=1 to 33 do
begin
if TPanel(FindComPonent('Panel'+inttostr(m+1))).Color =clred then
begin
aa[n]:=TPanel(FindComPonent('Panel'+inttostr(m+1))).Caption ;
l:=l+1;
n:=n+1;
end ;
end;
for i:=1 to 33 do
if i<10 then
aa[i]:='0' + inttostr(i) + ' '
else
aa[i]:=inttostr(i) + ' ';
Ts:=TStringList.Create ;
for i1:=1 to l do begin
for i2:=i1+1 to l do begin
for i3:=i2+1 to l do begin
for i4:=i3+1 to l do begin
for i5:=i4+1 to l do begin
for i6:=i5+1 to l do
begin
Ts.Add(aa[i1]+aa[i2]+aa[i3]+aa[i4]+aa[i5]+aa[i6]);
end;
end;
end;
end;
end;
end;
Ts.SaveToFile('Datas\Temp.txt');
Ts.Free;
end;
最近正在写一个33选6的程序,要求就是把1~33个数按无重复排。但是不知道为什么写出来的内容老是有不对的,而且速度非常的慢,现在把我写的程序拿出来,大家帮助看一看,
procedure TForm_dict.FillText ;
var
aa:array[1..33] of string;
i,i1,i2,i3,i4,i5,i6:integer;
m,n,l:integer;
Ts:TStringList;
begin
l:=0;
n:=1;
for m:=1 to 33 do
begin
if TPanel(FindComPonent('Panel'+inttostr(m+1))).Color =clred then
begin
aa[n]:=TPanel(FindComPonent('Panel'+inttostr(m+1))).Caption ;
l:=l+1;
n:=n+1;
end ;
end;
for i:=1 to 33 do
if i<10 then
aa[i]:='0' + inttostr(i) + ' '
else
aa[i]:=inttostr(i) + ' ';
Ts:=TStringList.Create ;
for i1:=1 to l do begin
for i2:=i1+1 to l do begin
for i3:=i2+1 to l do begin
for i4:=i3+1 to l do begin
for i5:=i4+1 to l do begin
for i6:=i5+1 to l do
begin
Ts.Add(aa[i1]+aa[i2]+aa[i3]+aa[i4]+aa[i5]+aa[i6]);
end;
end;
end;
end;
end;
end;
Ts.SaveToFile('Datas\Temp.txt');
Ts.Free;
end;
解决方案 »
- 数据通信问题
- NMFTP程序如何改IDFTP程序,就一段,哪位哥哥帮帮忙?
- 在Delphi中使用ADO遇到的奇怪问题
- 请问,activex中能否使用其他DLL文件?能否使用hook?
- 请问如何获得文件的创建时间,修改时间以及创建作者等信息
- record not found or changed by another user(已经一个星期了)
- 农历控件
- DBgrid列可见性控制错误,真奇怪,高手指点
- 快救我!!!!
- delphi中动态数组的问题
- 急,请问如何抓取动态视频格式文件的第一帧???
- 给大家推荐:Internet远程数据库访问开发套件MiddleADOSystem(Release2.2)
{
int m,n,temp;
int k;
m=i;
n=j;
k=a[(i+j)/2]; /*选取的参照*/
do {
while(a[m]<k&&m<j) m++; /* 从左到右找比k大的元素*/
while(a[n]>k&&n>i) n--; /* 从右到左找比k小的元素*/
if(m<=n) { /*若找到且满足条件,则交换*/
temp=a[m];
a[m]=a[n];
a[n]=temp;
m++;
n--;
}
}while(m<=n);
if(m<j) quick(a,m,j); /*运用递归*/
if(n>i) quick(a,i,n);
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TList *L;
int N[7];
long T=time(0);
int iIndex;
AnsiString s;
T=T % 1000;
L=new TList();
try
{
Label8->Caption="00";
Label9->Caption="00";
Label10->Caption="00";
Label11->Caption="00";
Label12->Caption="00";
Label13->Caption="00";
Label14->Caption="00";
Application->ProcessMessages();
iIndex=0;
for (int i = 0; i < 33; i++) {
L->Add((void *)(i+1));
//Memo1->Lines->Add(i+1);
}
for (int m = 0; m <= 5; m++) {
for (int i = 0; i <= T; i++) {
random(time(0));
int j=rand();
int k=j % L->Count; int iTmp=(int)L->Items[0];
L->Items[0]=L->Items[k];
L->Items[k]=(void *)iTmp;
}
//Memo1->Lines->Add("-----------------------------");
//for (int i = 0; i <= L->Count-1; i++) {
// Memo1->Lines->Add((int)L->Items[i]);
//} random(time(0));
int j=rand();
j=j%L->Count;
N[m]=(int)L->Items[j];
L->Delete(j); switch (m) {
case 0:{
s.sprintf("%2.2d",N[0]);
Label8->Caption=s;
//Application->ProcessMessages();
//Sleep(10);
break;
}
case 1:{
s.sprintf("%2.2d",N[1]);
Label9->Caption=s;
//Application->ProcessMessages();
//Sleep(10);
break;
}
case 2:{
s.sprintf("%2.2d",N[2]);
Label10->Caption=s;
//Application->ProcessMessages();
//Sleep(10);
break;
}
case 3:{
s.sprintf("%2.2d",N[3]);
Label11->Caption=s;
//Application->ProcessMessages();
//Sleep(10);
break;
}
case 4:{
s.sprintf("%2.2d",N[4]);
Label12->Caption=s;
//Application->ProcessMessages();
//Sleep(10);
break;
}
case 5:{
s.sprintf("%2.2d",N[5]);
Label13->Caption=s;
//Application->ProcessMessages();
//Sleep(10);
break;
}
case 6:{
s.sprintf("%2.2d",N[6]);
Label14->Caption=s;
//Application->ProcessMessages();
//Sleep(10);
break;
}
default:
;
}
}
random(N[5]);
N[6]=rand()%16+1;
s.sprintf("%2.2d",N[6]);
Label14->Caption=s;
quick(N,0,5);
for (int i = 0;i <= 6; i++) {
Chart1->SeriesList->Items[i]->AddNull(N[i]);
} s.sprintf("%2.2d %2.2d %2.2d %2.2d %2.2d %2.2d:%2.2d",N[0],N[1],N[2],N[3],N[4],N[5],N[6]);
Memo1->Lines->Add(s);
}
__finally
{
L->Free();
}
}
时间复杂度太大
var
Reds:array [1..33] of integer;
Red,i:integer;
R,tmp,jieguo:string;
begin
randomize;
for i:=1 to 33 do Reds[i]:=i;
repeat
Red:=random(33)+1;
if Reds[Red]<>-1 then
begin
RedS[Red]:=-1;
if Red<10 then R:='0'+inttostr(Red)
else R:=inttostr(Red);
end else
continue;
jieguo:=jieguo+R+' ';
until length(jieguo)=18;
edit1.Text :=jieguo;//结果在edit1中显示出来
end;
procedure TForm1.Button1Click(Sender: TObject);
var
ball:TStringList;
n:integer;
begin
ball:=TStringList.Create;
ball.Duplicates:=dupIgnore;
ball.Sorted:=true;
Randomize;
while ball.Count<6 do
begin
n:=Random(33)+1;
if n<10 then ball.Add('0'+inttostr(n))
else ball.Add(inttostr(n));
end;
ShowMessage(ball.Text);
ball.Free;
end;
var
ball:TStringList;
begin
ball:=TStringList.Create;
ball.Duplicates:=dupIgnore;
ball.Sorted:=true;
Randomize;
while ball.Count<6 do ball.Add(Format('%.2d',[Random(33)+1]));
ShowMessage(ball.Text);
ball.Free;
end;
var
tlist:TStringList;
i,j:integer;
tarr:array[1..33] of string;
tstr:string;
begin
for i:=1 to 33 do
tarr[i-1]:=format('%.2d',[i]);
tlist:=tStringlist.Create;
for i:=1 to 6 do
begin
j:=random(33-i+1)+1;
tlist.Add(tarr[j]);
tarr[j]:=tarr[33-i+1];
end;
tlist.Sort;
tstr:=tlist.Strings[0];
for i:=1 to 5 do
tstr:=tstr+' '+tlist.Strings[i];
showmessage(tstr);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
tlist:TStringList;
i,j:integer;
tarr:array[1..33] of string;
tstr:string;
begin
for i:=1 to 33 do
tarr[i-1]:=format('%.2d',[i]);
tlist:=tStringlist.Create;
for i:=1 to 6 do
begin
j:=random(33-i+1);
tlist.Add(tarr[j]);
tarr[j]:=tarr[33-i];
end;
tlist.Sort;
tstr:=tlist.Strings[0];
for i:=1 to 5 do
tstr:=tstr+' '+tlist.Strings[i]; tlist.Free;
showmessage(tstr);
end;