Сгенерируйте все перестановки чисел - 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 выполняется следующее:
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д