Pagini recente » Cod sursa (job #2362824) | Cod sursa (job #375838) | Cod sursa (job #2136746) | Cod sursa (job #532390) | Cod sursa (job #537049)
Cod sursa(job #537049)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int cmp(const void *a, const void *b)
{
return *(char*)a - *(char*)b;
}
void next_perm(char s[])
{
int a, b, i, len = strlen(s);
char tmp;
for (i=len-1; i>0; i--)
if (s[i-1] < s[i])
{
a = i-1;
break;
}
for (i=len-1; i>0; i--)
if ( s[i] > s[a] )
{
b = i;
break;
}
tmp = s[a];
s[a] = s[b];
s[b] = tmp;
qsort(s+a+1, len-a-1, sizeof(char), cmp);
}
int factorial(int n)
{
int r = 1;
for ( int i=2; i<=n; i++)
r *= i;
return r;
}
int main()
{
int n;
FILE *in = fopen("permutari.in", "r");
fscanf(in, "%d", &n);
fclose(in);
FILE *out = fopen("permutari.out", "w");
char *s = (char*)calloc( n+1, sizeof(char) );
for (int i=0; i<n; i++)
s[i] = i+1+'0';
for (int i=0; i<n; i++)
fprintf(out, "%c ", s[i]);
fprintf(out, "\n");
int nfact = factorial(n);
for (int i=0; i<nfact-1; i++)
{
next_perm(s);
for (int j=0; j<n; j++)
fprintf(out, "%c ", s[j]);
fprintf(out, "\n");
}
fclose(out);
}