386
Cerința
Se citește un număr natural n (n<16). Afișați în ordine lexicografică toate permutările mulțimii {1,2,…,n} în care elementele pare sunt puncte fixe (nu își schimbă poziția).
Date de intrare
Programul citește de la tastatură numărul n.
Date de ieșire
Programul va afișa pe ecran permutările cerute, câte una pe fiecare rând și având elementele separate prin câte un spaţiu.
Restricții și precizări
1 < n < 16
Exemplu
Intrare
5
Ieșire
1 2 3 4 5 1 2 5 4 3 3 2 1 4 5 3 2 5 4 1 5 2 1 4 3 5 2 3 4 1
Explicație
Se vor genera permutările în care 2 și 4 nu își modifică poziția.
#include <bits/stdc++.h>
using namespace std;
int n , m , x[30] , cnt , p[30];
int afisare()
{
int pp = 1;
for(int i = 1 ; i <= n ; i++)
if(i % 2 == 0) cout << i << " ";
else cout << x[pp++] << " ";
cout << '\n';
}
void back(int k)
{
for(int i = 1 ; i <= n ; i += 2)
if(!p[i])
{
x[k] = i;
p[i] = 1;
if(k == cnt) afisare();
else back(k + 1);
p[i] = 0;
}
}
int main()
{
cin >> n;
if(n % 2 == 0) cnt = n / 2;
else cnt = (n + 1) / 2;
back(1);
return 0;
}
Comentarii