Mai intai trebuie sa te autentifici.
Cod sursa(job #1010688)
Utilizator | Data | 15 octombrie 2013 13:51:28 | |
---|---|---|---|
Problema | Generare de permutari | Scor | 80 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 1.16 kb |
#include <stdio.h>
int fact (int n)
{
int b = 1;
for(int i = 2; i <= n; i++)
b*=i;
return b;
}
int main()
{
int n;
FILE* fr = fopen("permutari.in", "r");
FILE* fw = fopen("permutari.out", "w");
fscanf(fr, "%d", &n);
int *A = new int[n];
int *B = new int[n];
for(int i = 0; i < n; i++)
A[i] = i;
int facto = fact(n);
int k = 0;
bool isPerm;
while(facto > k)
{
isPerm = true;
for(int i = 0; i < n; i++)
B[i] = 0;
for(int i = 0; i < n; i++)
{
B[A[i]]++;
if(B[A[i]] > 1)
{
isPerm = false;
break;
}
}
if(isPerm)
{
k++;
for(int i = 0; i < n; i++)
fprintf(fw, "%d ", A[i] + 1);
fprintf(fw, "\n");
}
int i = 1;
while(i <= n)
{
A[n-i]++;
if(A[n-i] == n)
{
A[n-i] = 0;
i++;
}
else
break;
}
}
return 0;
}