Das hat mir jetzt keine Ruhe gelassen
Hier mein Quellcode:
Delphi-Quellcode:
function TForm1.Factorial(
const x: Byte): Word;
begin
if x > 1
then
result := x * Factorial(x - 1)
else
result := x;
end;
procedure TForm1.CalcNextS(
var s:
string;
const Initial:
string);
var
l: Byte;
// Position linker Austauschpartner
r: Byte;
// Position rechter Austauschpartner
i: Byte;
// Laufvariable
Done: Boolean;
// für Bubblesort
Temp: Char;
begin
// linken Austauschpartner finden
l := Length(s);
repeat
Dec(l);
until Pos(s[l], Initial) < Pos(s[l+1], Initial);
// rechten Austauschpartner finden
r := l + 1;
for i := l
to Length(s)
do
if (Pos(s[i], Initial) > Pos(s[l], Initial))
and
(Pos(s[i], Initial) < Pos(s[r], Initial))
then
r := i;
// austauschen
Temp := s[l];
s[l] := s[r];
s[r] := Temp;
// rechts von l der Größe nach sortieren
if l <> Length(s) - 1
then
repeat
Done := True;
for i := l+1
to Length(s) - 1
do
if Pos(s[i], Initial) > Pos(s[i+1], Initial)
then
begin
Temp := s[i];
s[i] := s[i+1];
s[i+1] := Temp;
Done := False;
end;
until Done;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
i: Integer;
s:
string;
begin
ListBox1.Clear;
s := Edit1.Text;
ListBox1.Items.Add(s);
for i := 2
to Factorial(Length(s))
do
begin
CalcNextS(s, Edit1.Text);
ListBox1.Items.Add(s);
end;
end;
Das Wort kann aus bis zu 255 Zeichen bestehen. Ich hab allerdings noch nicht berücksichtigt, dass Buchstaben auch mehrfach vorkommen können.
Die .exe ist im Anhang