Сгенерируйте все перестановки чисел - 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;

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

  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
Похожие ответы