Einzelnen Beitrag anzeigen

juniorA

Registriert seit: 14. Sep 2011
112 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#7

AW: Permutation (mögliche Kombinationen)

  Alt 16. Jun 2014, 18:18
Ich habe mir jetzt einmal einen Teil des Codes geladen und angepasst. Das Problem mit der Laufzeit bei Kombinationen mit mehr als 6 Zeichen ist da. Ich habe aber noch eine anderes Problem und zwar gibt es bei mehr als 11 Zeichen einen Integerüberlauf.

Delphi-Quellcode:
procedure Form1.Button1Click(Sender: TObject);
{$APPTYPE CONSOLE}

const anz_c : integer = 12;

type
  TItem = char;
  TArray = array[0..12] of TItem;


procedure Permutation(K: Integer; var A: TArray);
var
  I, J : Integer;
  Tmp : TItem;

begin
  for I:= 1 to (anz_c + 1) do
  begin
    J := K mod I;
    Tmp := A[J];
    A[J] := A[I-1];
    A[I-1]:= Tmp;
    K := K div I;
  end;
end;

var
  A : TArray;
  I, K, Count, anz : Integer;
  S, S1, S2 : ShortString;
  Source : TArray;

begin
  for I := 0 to anz_c do source[i] := chr(65+i);

  Count:= 1;
  anz := 0;
  I:= Length(A);
  while I > 1 do
  begin
    Count:= Count * I;
    Dec(I);
  end;

  S:= '';
  for K:= 0 to Count - 1 do
  begin
    A:= Source;
    Permutation(K, A);
    S1:= '';

    for I:= 0 to anz_c do
    begin
      s2 := A[I];
      S1:= S1 + S2;
    end;

    inc(anz);
    S:= S + ' ** ' + S1;
    if Length(S) > 40 then
    begin
      Writeln(S);
      S:= '';
    end;
  end;

  if Length(S) > 0 then Writeln(S);
  writeln('Anz : ', anz);
  Readln;

end;
Ideen gesucht
  Mit Zitat antworten Zitat