Вычислить степень перестановки - Pascal ABC
Формулировка задачи:
Помогите пожалуйста решить эту задачу, код есть, но его не пропускает проверка сайта.
Требуется вычислить степень заданной перестановки.
Перестановкой из N элементов называется упорядоченный набор из N различных чисел от 1 до N. Количество различных перестановок порядка N равно PN = N!
Пусть у нас есть упорядоченное множество из N элементов. Перестановка задает преобразование этого множества. А именно, она говорит, что на i место нужно поставить ai элемент множества, где ai - i-тый элемент перестановки.
Обратной перестановкой к перестановке π называется такая перестановка π-1, что ππ-1 = π-1π = ε, где ε – тождественная перестановка.
Степенью перестановки называется минимальное натуральное число k такое, что πk = ε
Входные данные
В первой строке входного файла записано число 0 < N <= 100 - порядок перестановки. Во второй строке записана сама перестановка.
Решение задачи: «Вычислить степень перестановки»
textual
Листинг программы
Program P23; Const NMAX = 100; Var X,Y,R : Array[1..NMAX] Of integer; Var n,i,q,k : integer; Procedure multPerms(var A,B,R : Array[1..NMAX] of integer; n : integer); Var i,k : integer; Begin for i:=1 to n Do Begin k:=A[i]; R[i]:=B[k]; end; End; Begin readln(n); for i:=1 to n Do Begin Read(X[i]); Y[i]:=X[i]; end; k:=0; While (true) Do Begin multPerms(Y,X,R,n); k:=k+1; q:=0; for i:=1 to n Do if R[i]<>i then begin q:=-1; break; end; if q=0 then break; for i:=1 to n Do Y[i]:=R[i]; End; writeln(k); End.
Объяснение кода листинга программы
- Создается программа P23.
- Определяется константа NMAX, которая представляет максимально допустимое значение для переменной n.
- Определяются переменные X, Y и R, которые представляют массивы целых чисел.
- Определяются переменные n, i, q и k, которые будут использоваться в процессе выполнения программы.
- Определяется процедура multPerms, которая принимает три параметра: A, B и R, а также один параметр n. Эта процедура будет использоваться для вычисления степени перестановки.
- В цикле while выполняется следующее:
- вызывается процедура multPerms, передавая ей массивы X, Y и R, а также значение n.
- переменная k инкрементируется на 1.
- переменная q инициализируется значением 0.
- для каждого i от 1 до n выполняется следующая проверка:
- если значение R[i] отличается от i, то переменная q устанавливается в -1 и цикл прерывается.
- если значение R[i] равно i, то переменная q устанавливается в 0 и цикл продолжается.
- если значение q равно 0, то цикл прерывается.
- для каждого i от 1 до n выполняется следующая операция: значение Y[i] заменяется на значение R[i].
- По завершении цикла while выводится значение переменной k.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д