Печать всех перестановок чисел от 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
не станет пустой строкой.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д