Печать всех перестановок чисел от 1 до 5 - Free Pascal

Узнай цену своей работы

Формулировка задачи:

Программа печатает все перестановки чисел от 1 до 5.

Решение задачи: «Печать всех перестановок чисел от 1 до 5»

textual
Листинг программы
Var RS : String;
 
Function StRevers(St :String) : String;
Var
  ii  : Longint;
  St0 : String;
Begin
  St0:='';
 For ii:=length(St) downto 1 do
  St0:=St0+St[ii];
  StRevers:=St0;
end;
 
Function LexNext(S : String) : String;
Var
  len,m,k,t : Longint;
  Sch       : Char;
  cs        : String;
  flag      : Boolean;
Begin
  len:=Length(S); flag:=True;
  For m:=len-1 downto 1 do
    If S[m]<S[m+1] then Break;
  For k:=len downto m+1 do
    If S[k]>S[m] then
    Begin
      flag:=False;
      Break;
    end;
  If flag then LexNext:='' else
  Begin
    For t:=len downto m+1 do
      If (S[t]>S[m]) and (S[t]<=S[k]) then k:=t;
    cs:=S;
    Sch:=cs[m];
    cs[m]:=cs[k];
    cs[k]:=Sch;
    LexNext:=Copy(cs,1,m)+StRevers(Copy(cs,m+1,len-m));
  end;
end;
 
Begin
  RS:='12345';
  While RS<>'' do
  Begin
    Writeln(RS);
    RS:=LexNext(RS);
  end;
end.

Объяснение кода листинга программы

В этом коде используется две функции:

  1. Функция StRevers принимает строку St и возвращает её обратное представление. Эта функция инициализирует переменную St0 пустой строкой, а затем проходит по всем символам строки St в обратном порядке и добавляет каждый символ в St0. В конце функция возвращает St0.
  2. Функция LexNext принимает строку S и возвращает следующую перестановку символов в этой строке. Эта функция сначала определяет длину строки len, а затем использует два цикла for для определения текущего порядка символов. Если текущий символ меньше следующего, функция прерывает выполнение. Если текущий символ больше следующего, функция устанавливает флаг flag в false и прерывает выполнение. Если текущий символ больше или равен следующему, но меньше последнего символа, функция находит максимальную позицию этого символа и заменяет его на последний символ в текущей позиции. Функция возвращает пустую строку, если достигается конец строки, иначе возвращает переставленную строку. В основной части кода используется цикл while, который продолжает выводить текущую строку RS и вызывать функцию LexNext, пока RS не станет пустой строкой.

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


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

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

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