Разработайте алгоритм для вывода всех возможных перестановок символов в строке - 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.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4.429 из 5
Похожие ответы