Pagini recente » Cod sursa (job #2362579) | Borderou de evaluare (job #469294) | Cod sursa (job #1010688)
#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;
}