Разработайте алгоритм для вывода всех возможных перестановок символов в строке - PascalABC.NET
Формулировка задачи:
Разработайте алгоритм для вывода всех возможных перестановок символов в строке (считайте, что все символы используются только один раз).
Решение задачи: «Разработайте алгоритм для вывода всех возможных перестановок символов в строке»
textual
Листинг программы
- program z1;
- var s : string;
- i, j, k, n, m, sfdadg : integer;
- r : char;
- procedure qsort(low : integer; high : integer);
- var
- m, t : char;
- begin
- i := low; j := high; m := s[(i + j) shr 1];
- repeat
- while ord(s[i]) < ord(m) do inc(i);
- while ord(s[j]) > ord(m) do dec(j);
- if (i <= j) then begin
- t := s[i]; s[i] := s[j]; s[j] := t;
- inc(i); dec(j);
- end;
- until (i > j);
- if (low < j) then qsort(low, j);
- if (i < high) then qsort(i, high);
- end;
- function factorial(x : integer) : integer;
- var ans, l : integer;
- begin
- ans := 1;
- for l := 2 to x do
- ans := ans * l;
- factorial := ans;
- end;
- begin
- readln(s);
- qsort(1, length(s));
- k := 1;
- n := length(s);
- for sfdadg := 1 to factorial(n) do begin
- writeln(s);
- k := n - 1;
- while (ord(s[k]) > ord(s[k + 1]))and(k > 1) do begin
- k := k - 1;
- end;
- j := n;
- while ord(s[k]) > ord(s[j]) do begin
- j := j - 1;
- end;
- r := s[k]; s[k] := s[j]; s[j] := r;
- j := n;
- m := k + 1;
- while j > m do begin r := s[j]; s[j] := s[m]; s[m] := r; j := j - 1; m := m + 1 end
- end;
- end.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д