比如,在'a'--'z'中,任意抽取n个字母分别进行排列和组合,形成单词,比如是"system"、"Project"等,比如选择了6个字母进行处理,结果中不仅包含6个字母的组合,同时应该包含1-6个字母的组合;就像产生了"system",其中应该还有“sys、s、t、y、yt、syt”等等.................................
现在我使用了递归的算法,但结果出来了,a,aa,aaa....,ab,abc,abcd,abcde......
稍后我将我的算法贴出来,请大家帮我修改一下!
大家一起研究。             
                         顶者有分!

解决方案 »

  1.   

    其中计算的代码如下:
    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
    ............................
      

  2.   

    但我想要的结果类似:
    a
    aa
    ab
    ac
    ..
    az
    aaa
    aab
    aac
    ...
    aaz
    aba
    abb
    abc
    ...
    abz
    aca
    acb
    ...
    zzz
    ...
    system
    ......
    project
    ......
    zzzzzzz
    ..............
      

  3.   

    还有一个问题,我在使用多线程来处理的时候,使用的循环来调用多线程,比如: var
      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多或者更多次数呢?而且还有很多线程号是同一个线程,为什么??
      

  4.   

    在MyThread线程中Execute方法如下:
    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;