Печать всех перестановок чисел от 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.
Объяснение кода листинга программы
В этом коде используется две функции:
- Функция
StRevers
принимает строкуSt
и возвращает её обратное представление. Эта функция инициализирует переменнуюSt0
пустой строкой, а затем проходит по всем символам строкиSt
в обратном порядке и добавляет каждый символ вSt0
. В конце функция возвращаетSt0
. - Функция
LexNext
принимает строкуS
и возвращает следующую перестановку символов в этой строке. Эта функция сначала определяет длину строкиlen
, а затем использует два циклаfor
для определения текущего порядка символов. Если текущий символ меньше следующего, функция прерывает выполнение. Если текущий символ больше следующего, функция устанавливает флагflag
вfalse
и прерывает выполнение. Если текущий символ больше или равен следующему, но меньше последнего символа, функция находит максимальную позицию этого символа и заменяет его на последний символ в текущей позиции. Функция возвращает пустую строку, если достигается конец строки, иначе возвращает переставленную строку. В основной части кода используется циклwhile
, который продолжает выводить текущую строкуRS
и вызывать функциюLexNext
, покаRS
не станет пустой строкой.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д