Сгенерируйте все перестановки чисел - 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
Есть код,в чем может быть ошибка?Спасибо.
var a: array[1..1000] of integer; n, j: integer; kol: longint; procedure gen(l, r: integer; var k: longint); var i, v: integer; begin if (l = r) then begin for i := 1 to n do write(a[i], ' '); writeln(); k := k + 1; end else begin for i := l to r do begin v := a[l];a[l] := a[i];a[i] := v; gen(l + 1, r, k); v := a[l];a[l] := a[i];a[i] := v; end; end; end; begin readln( n); for j := 1 to N do A[j] := j; gen(1, n, kol); end.
Решение задачи: «Сгенерируйте все перестановки чисел»
textual
Листинг программы
procedure gen(l, r: integer; var k: longint); var i, j, v: integer; begin if l=r then begin for j := 1 to n do write(a[j], ' '); writeln; end else for i := l to r do begin gen(l + 1, r, k); if i<r then begin v := a[l];a[l] := a[l+1];a[l+1] := v; end; end; end;
Объяснение кода листинга программы
- Объявление процедуры gen с параметрами l, r типа integer и переменной k типа longint.
- Объявление переменных i, j, v типа integer.
- Проверка условия: если l равно r, то
- Для каждого значения j от 1 до n выполняется операция вывода значения a[j] и пробела.
- Выводится символ перехода на новую строку.
- В противном случае
- Для каждого значения i от l до r выполняется следующее:
- Вызывается процедура gen с параметрами l + 1, r, k.
- Если i меньше r, то
- Происходит обмен значений: v получает значение a[l], a[l] получает значение a[l+1], a[l+1] получает значение v. Этот код генерирует все перестановки чисел, используя рекурсивный подход.
- Для каждого значения i от l до r выполняется следующее:
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д