Einzelnen Beitrag anzeigen

Benutzerbild von ibp
ibp

Registriert seit: 31. Mär 2004
Ort: Frankfurt am Main
1.511 Beiträge
 
Delphi 7 Architect
 
#2

Re: Wie findet man ale Kombinationen?

  Alt 24. Jan 2005, 15:05
Delphi-Quellcode:
type
  TForm1 = class(TForm)
    meAusg: TMemo;
    edWort: TEdit;
    btStart: TButton;
    procedure btStartClick(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}


procedure tausche(var s:string; const k:integer);
var
  pu: Tstringlist;
  i: integer;
  c: char;
begin
  pu := Tstringlist.Create; //TcharList gibts nicht!
  try
    pu.Sorted := false;
    for i := k to length(s) do
      pu.Add(s[i]);
    pu.Sort;
    //Tausche mit dem kleinsten aus pu, das größer als s[k-1] ist
    c := s[k-1];
    for i := 0 to pu.Count -1 do
      if c < pu[i][1] then
      Begin
        s[k-1] := pu[i][1];
        pu[i] := c; //getauscht!
        break;
      End;
    pu.Sort;
    for i := k to length(s) do
      s[i] := pu[i-k][1];
  finally
    pu.free
  End;
end;

procedure naechstePermutation(var s: string);
  var k:integer; //z.B. s='12543' k=3
begin
  k:= length(s);
  while (k > 0) and
        (s[k] < s[k-1]) do
    dec(k);

  if k =1 then
    s := ''
  else
    Tausche(s,k);
end;

procedure TForm1.btStartClick(Sender: TObject);
var
  s: string;
  zaehl: integer;
begin
  s := edWort.Text;
  meAusg.Lines.Clear;
  zaehl := 0;
  repeat
    inc(zaehl);
    meAusg.Lines.Add(s);
    naechstePermutation(s);
  until s = '';
  meAusg.Lines.Add('———————');
  meAusg.Lines.add('Anzahl:'+intToStr(zaehl));
end;

damit klappts! aber achtung keine zeichen doppelt verwenden! dafür musst du das dann ein wenig umschreiben!
  Mit Zitat antworten Zitat