Вычислить степень перестановки - Pascal ABC

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

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

Помогите пожалуйста решить эту задачу, код есть, но его не пропускает проверка сайта. Требуется вычислить степень заданной перестановки. Перестановкой из N элементов называется упорядоченный набор из N различных чисел от 1 до N. Количество различных перестановок порядка N равно PN = N! Пусть у нас есть упорядоченное множество из N элементов. Перестановка задает преобразование этого множества. А именно, она говорит, что на i место нужно поставить ai элемент множества, где ai - i-тый элемент перестановки. Обратной перестановкой к перестановке π называется такая перестановка π-1, что ππ-1 = π-1π = ε, где ε – тождественная перестановка. Степенью перестановки называется минимальное натуральное число k такое, что πk = ε Входные данные В первой строке входного файла записано число 0 < N <= 100 - порядок перестановки. Во второй строке записана сама перестановка.
Листинг программы
  1. var a:array[0..20001]of integer;i,j,n:integer;
  2. begin
  3. read(n);
  4. for i:=1 to n do
  5. begin
  6. read(j);
  7. a[j]:=i;
  8. end;
  9. for i:=1 to n do
  10. write(a[i],' ');
  11. end.

Решение задачи: «Вычислить степень перестановки»

textual
Листинг программы
  1. Program P23;
  2.  
  3. Const NMAX = 100;
  4.  
  5. Var X,Y,R   : Array[1..NMAX] Of integer;
  6. Var n,i,q,k : integer;
  7.  
  8. Procedure multPerms(var A,B,R : Array[1..NMAX] of integer; n : integer);
  9. Var i,k : integer;
  10. Begin
  11.     for i:=1 to n Do Begin
  12.         k:=A[i];
  13.         R[i]:=B[k];
  14.     end;
  15. End;
  16.  
  17. Begin
  18.  
  19.      readln(n);
  20.      
  21.      for i:=1 to n Do Begin
  22.          Read(X[i]);
  23.          Y[i]:=X[i];
  24.      end;
  25.      
  26.      k:=0;
  27.      
  28.      While (true) Do Begin
  29.      
  30.          multPerms(Y,X,R,n);
  31.          
  32.          k:=k+1;
  33.          q:=0;
  34.          
  35.          for i:=1 to n Do
  36.              if R[i]<>i then begin
  37.                 q:=-1;
  38.                 break;
  39.              end;
  40.              
  41.          if q=0 then break;
  42.          
  43.          for i:=1 to n Do
  44.              Y[i]:=R[i];
  45.  
  46.      End;
  47.  
  48.      writeln(k);
  49.      
  50. End.

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

  1. Создается программа P23.
  2. Определяется константа NMAX, которая представляет максимально допустимое значение для переменной n.
  3. Определяются переменные X, Y и R, которые представляют массивы целых чисел.
  4. Определяются переменные n, i, q и k, которые будут использоваться в процессе выполнения программы.
  5. Определяется процедура multPerms, которая принимает три параметра: A, B и R, а также один параметр n. Эта процедура будет использоваться для вычисления степени перестановки.
  6. В цикле 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].
  7. По завершении цикла while выводится значение переменной k.

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


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

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

12   голосов , оценка 4.167 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут