4815. Все перестановки заданной длины

 

По данному числу n выведите все перестановки чисел от 1 до n в лексикографическом порядке.

 

Вход. Одно число n (0 < n < 10).

 

Выход. Вывести все перестановки чисел от 1 до n в лексикографическом порядке. Перестановки выводятся по одной в строке, числа в перестановке выводятся без пробелов.

 

Пример входа

Пример выхода

3

123

132

213

231

312

321

 

 

РЕШЕНИЕ

генерация перестановок

 

Анализ алгоритма

Сгенерируем все перестановки при помощи функции next_permutation.

 

Реализация алгоритма

Текущую перестановку храним в массиве m.

 

int m[11];

 

Читаем значение n. Заносим перестановку {1, 2, …, n} в массив m начиная с нулевой позиции.

 

scanf("%d",&n);

for(i = 0; i < n; i++) m[i] = i + 1;

 

Генерируем все перестановки в массиве m при помощи функции next_permutation.

 

do

{

 

Выводим текущую перестановку.

 

  for(i = 0; i < n; i++)

    printf("%d",m[i]);

  printf("\n");

} while(next_permutation(m,m+n));