Сгенерируйте все перестановки чисел - Pascal

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

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

Перестановки Ограничение времени 1 секунда Ограничение памяти 64Mb Ввод стандартный ввод или input.txt Вывод стандартный вывод или output.txt Сгенерируйте все перестановки чисел 1,…,n и выведите их в таком порядке, что любые две соседние перестановки отличаются только порядком двух соседних элементов (к примеру, за 1, 2, 3, 4 может следовать 1, 2, 4, 3, но не 1, 4, 3, 2). Формат ввода Входной файл содержит одно целое число 1 ≤ n ≤ 8. Формат вывода Выведите строк, каждая из которых содержит очередную перестановку — n целых чисел, разделённых пробелом. Пример Ввод Вывод 3 1 2 3 1 3 2 3 1 2 3 2 1 2 3 1 2 1 3
Листинг программы
  1. var
  2. a: array[1..1000] of integer;
  3. n, j: integer;
  4. kol: longint;
  5.  
  6. procedure gen(l, r: integer; var k: longint);
  7. var
  8. i, v: integer;
  9. begin
  10.  
  11. if (l = r) then
  12. begin
  13. for i := 1 to n do write(a[i], ' ');
  14. writeln();
  15. k := k + 1;
  16. end
  17. else
  18. begin
  19. for i := l to r do
  20. begin
  21. v := a[l];a[l] := a[i];a[i] := v;
  22. gen(l + 1, r, k);
  23. v := a[l];a[l] := a[i];a[i] := v;
  24. end;
  25. end;
  26. end;
  27. begin
  28. readln( n);
  29. for j := 1 to N do
  30. A[j] := j;
  31. gen(1, n, kol);
  32. end.
Есть код,в чем может быть ошибка?Спасибо.

Решение задачи: «Сгенерируйте все перестановки чисел»

textual
Листинг программы
  1. procedure gen(l, r: integer; var k: longint);
  2. var
  3.   i, j, v: integer;
  4.  
  5. begin
  6.     if l=r then
  7.     begin
  8.       for j := 1 to n do write(a[j], ' ');
  9.       writeln;
  10.     end
  11.     else
  12.     for i := l to r do
  13.     begin
  14.       gen(l + 1, r, k);
  15.       if i<r then
  16.       begin
  17.         v := a[l];a[l] := a[l+1];a[l+1] := v;
  18.       end;
  19.     end;
  20. end;

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

  1. Объявление процедуры gen с параметрами l, r типа integer и переменной k типа longint.
  2. Объявление переменных i, j, v типа integer.
  3. Проверка условия: если l равно r, то
    • Для каждого значения j от 1 до n выполняется операция вывода значения a[j] и пробела.
    • Выводится символ перехода на новую строку.
  4. В противном случае
    • Для каждого значения i от l до r выполняется следующее:
      • Вызывается процедура gen с параметрами l + 1, r, k.
      • Если i меньше r, то
      • Происходит обмен значений: v получает значение a[l], a[l] получает значение a[l+1], a[l+1] получает значение v. Этот код генерирует все перестановки чисел, используя рекурсивный подход.

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


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

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

6   голосов , оценка 4.333 из 5

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

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

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