Cod sursa(job #597354)

Utilizator dspMihaiDespotovici Mihai dspMihai Data 21 iunie 2011 21:33:51
Problema Generare de permutari Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 0.83 kb
#include <stdio.h>
#define Nmax 1000
int N,i,k,total,r,crt,ok=1, gen[Nmax], v[9];

int verificare (void) 
{
	for (i=1; i<=N; i++) v[i]=0;
	for (i=1; i<=N; i++) v[gen[i]]++;
	ok=1;
	for (i=1; i<=N && ok; i++) if (v[i]!=1) ok=0;
	return ok;
}

void incrementare (void)
{
	r=1;
	i=N;
	while (r) 
	{
		crt=gen[i]+1;
		gen[i]=crt%(N+1);
		if (!gen[i]) gen[i]=1;
		r=crt/(N+1);
		i--;
	}
}
int main () {
	FILE *f;
	f=fopen("permutari.in", "r");
	fscanf(f, "%d", &N);
	fclose(f);
	FILE *g;
	g=fopen("permutari.out", "w");
	total=1;
	for (i=2; i<=N; i++) total*=i;
	for (i=1; i<=N; i++) {gen[i]=i; fprintf(g, "%d ", i);}
	fprintf(g, "\n");
	for (k=2; k<=total; k++) 
	{
		do incrementare(); while (!verificare());
		for (i=1; i<=N; i++) fprintf(g, "%d ", gen[i]);
		fprintf(g, "\n");
	}
	fclose(g);
	return 0;
}