比如,在'a'--'z'中,任意抽取n个字母分别进行排列和组合,形成单词,比如是"system"、"Project"等,比如选择了6个字母进行处理,结果中不仅包含6个字母的组合,同时应该包含1-6个字母的组合;就像产生了"system",其中应该还有“sys、s、t、y、yt、syt”等等.................................
现在我使用了递归的算法,但结果出来了,a,aa,aaa....,ab,abc,abcd,abcde......
稍后我将我的算法贴出来,请大家帮我修改一下!
大家一起研究。
顶者有分!
现在我使用了递归的算法,但结果出来了,a,aa,aaa....,ab,abc,abcd,abcde......
稍后我将我的算法贴出来,请大家帮我修改一下!
大家一起研究。
顶者有分!
procedure TTest.CreateDictionary;
var
tmpName:String;
i,curValue:Integer;
isFor:Boolean;
begin
curValue := 0;
isFor := False;
for i := 97 to 122 do
begin
curValue := FileLength; tmpName := ''+char(i) ;
FileName := FileName + tmpName ; AFileName := AFileName + FileName + '\n' ; //存放单次产生的字母组合
FileLength := FileLength + 1 ; //存放所有产生的字母组合
//j := j + 1;
//if j>4757 then
//ShowMessage(FileName); if (FileLength >8) or (Length(FileName)>curValue) then
begin
FileLength := FileLength - 1;
if i >= 122 then
begin
FileName :=LeftStr(FileName,curValue-8);
FileLength := FileLength - 1;
end
else
FileName :=LeftStr(FileName,curValue-1);
//exit;
isFor := True;
end;
if not isFor then CreateDictionary;
end;
end;最后将AFileName 存入文本文件中结果为:
a
aa
aaa
aaaa
aaaaa
aaaaaa
aaaaaaa
aaaaaaaa
aaaaaaab
aaaaaaac
aaaaaaad
aaaaaaae
aaaaaaaf
aaaaaaag
aaaaaaah
aaaaaaai
aaaaaaaj
aaaaaaak
aaaaaaal
aaaaaaam
aaaaaaan
aaaaaaao
aaaaaaap
aaaaaaaq
aaaaaaar
aaaaaaas
aaaaaaat
aaaaaaau
aaaaaaav
aaaaaaaw
aaaaaaax
aaaaaaay
aaaaaaaz
b
ba
bab
babc
babcd
babcde
babcdef
babcdefg
babcdefh
babcdefi
babcdefj
babcdefk
babcdefl
babcdefm
babcdefn
babcdefo
babcdefp
babcdefq
babcdefr
babcdefs
babcdeft
babcdefu
babcdefv
babcdefw
babcdefx
babcdefy
babcdefz
c
ca
cab
cabc
cabcd
cabcde
cabcdef
cabcdefg
cabcdefh
cabcdefi
cabcdefj
cabcdefk
cabcdefl
cabcdefm
cabcdefn
cabcdefo
cabcdefp
cabcdefq
cabcdefr
cabcdefs
cabcdeft
cabcdefu
cabcdefv
cabcdefw
cabcdefx
cabcdefy
cabcdefz
d
............................
a
aa
ab
ac
..
az
aaa
aab
aac
...
aaz
aba
abb
abc
...
abz
aca
acb
...
zzz
...
system
......
project
......
zzzzzzz
..............
NewThread:array of MyThread;
begin
setLength(NewThread,700);
for k := 0 to 700
begin
NewThread[k] := MyThread.Create;
NewThread[k].OnTerminate := MyThreadExit;
end;
end;我在Mythread线程中显示当前的线程数和总调用的次数,为什么调用的次数不只700次呢?可能会有900多或者更多次数呢?而且还有很多线程号是同一个线程,为什么??
var
i:Integer = 0; //Common Variable.
...........
procedure TMyThread.Execute;
begin
EnterCriticalSection(cs); //进入临界区
if(CheckUrl(httpUrl)) then
Synchronize(DataMemo);
i := i + 1;
LeaveCriticalSection(CS); //退出临界区
end;
procedure TMyThread.DataMemo;
begin
Memo.Lines.Add('xxxxx'+IntToStr(i)) ;
end;