数字的排列 - 所有可能的组合

时间:2015-04-16 16:58:30

标签: algorithm delphi permutation

我正在尝试计算所有可能的数字组合。但是,我的代码似乎没有计算所有值。

function TForm2.GetNextPerm(s: string): string;
var
    i, j, n : integer;
    t : Char;
    tempString : string;
begin
    result := s;

    //step 1
    i := length(s);
    for n := length(s) - 1 downto 1 do begin
      i := n;
      if (s[i] < s[i + 1]) then break;
    end;
    if (s[i] >= s[i + 1]) then exit;   //already at last permutation

    //step 2
    j := length(s);
    for n := length(s) downto 2 do begin
      j := n;
      if (s[j] > s[i]) then break;
    end;

    //step 3
    t := s[i];
    s[i] := s[j];
    s[j] := t;

    //step 4
    tempString := '';
    for n := length(s) downto i + 1 do
      tempString := tempString + copy(s, n, 1);
    if (tempString <> '') then s := copy(s, 1, i) + tempString;

    result := s;
end;


procedure TForm2.Button3Click(Sender: TObject);
var
  s, t: string;
  i: integer;
  x: integer;
  hash: string;
  o: string;
begin

  s := '0123';
  o := '0123';

  for x := 4 to 9 do
  begin
    t := GetNextPerm(s);
    while (s <> t) do
    begin

      hash := GenerateHashFromPasscode(s);
      if s = '76543210' then
        //Do stuff - Never gets here

     // if AnsiCompareText(hash, Edit1.Text) =0 then
       // ShowMessage('Match! ' + s);
      s := t;
      t := GetNextPerm(s);
    end;

    s := o + IntToStr(x);
    o := o + IntTOStr(x);
  end;
end;

我花了好几个小时试图弄清楚为什么它不能正常工作。也许一双新鲜的眼睛会有所帮助。我们的想法是,它将开始使用数字0123生成所有可能的组合。之后,它会找到所有可能的数字01234等组合,一直到012345678

0 个答案:

没有答案