Для заданного n получить все возможные перестановки чисел 1,2,...n - C (СИ)
Формулировка задачи:
Решение задачи: «Для заданного n получить все возможные перестановки чисел 1,2,...n»
int n, m[100], c; void perms(int k) { if (k==n) {printf("%d:\t",++c); for (int i=0; i<n; i++) printf("%d", m[i]); printf("\n");} else for (int i=1; i<=n; i++) { int f=0; for (int j=0; j<k; j++) if (m[j]==i) f=1; if (f) continue; m[k] = i; perms(k+1); } } int _tmain(int argc, _TCHAR* argv[]) { printf("Input n (not so big :)) : "); scanf("%d", &n); c=0; perms(0); system("pause"); return 0; }
Объяснение кода листинга программы
В этом коде реализована функция генерации всех возможных перестановок чисел от 1 до n. Переменная n задаёт количество чисел, которые нужно переставить.
Алгоритм основан на рекурсивном принципе. Функция perms() генерирует перестановки для каждого числа от 1 до n. Если число уже использовано в перестановке, то оно пропускается (это достигается с помощью переменной f). Если число не использовано, оно добавляется в перестановку (это достигается с помощью оператора присваивания m[k] = i). Затем функция вызывается рекурсивно для следующей перестановки (k+1).
Главная функция _tmain() считывает число n с помощью функции scanf() и запускает процесс генерации перестановок с помощью функции perms(0). В конце программа ожидает нажатия клавиши с помощью функции system(pause
) и завершается возвратом 0.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д