Сгенерируйте все перестановки чисел - 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 выполняется следующее: