Cod sursa(job #530422)

Utilizator CBogdanCiobanu Bogdan CBogdan Data 7 februarie 2011 19:28:35
Problema Generare de permutari Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.79 kb
#include<cstdio>
using namespace std;

int n,P[10],i,k,poz,aux;

void read(),solve();

int main()
{
	read();
	solve();
	
	return 0;
}

void read()
{
	freopen("permutari.in","r",stdin);
	freopen("permutari.out","w",stdout);
	scanf("%d",&n);
}

void solve()
{
	for(i=1;i<=n;i++){P[i]=i;printf("%d ",i);}
	printf("\n");
	poz=n;
	while(poz)
	{
		poz=n;
		while(P[poz]<P[poz-1] && poz>1)poz--;
		poz--;
		if(poz)
		{
			for(k=n;;k--)if(P[k]>P[poz]){aux=P[poz];P[poz]=P[k];P[k]=aux;break;}//interschimb P[poz] cu primul din coada mai mare
			for(i=1;i<=poz;i++)printf("%d ",P[i]);//afisez pana la poz
			for(i=poz+1,k=1;i<=n;i++,k++)
			{
				if(k<=(n-poz)/2){aux=P[i];P[i]=P[n-k+1];P[n-k+1]=aux;}//inverseaza
				printf("%d ",P[i]);
			}
			printf("\n");
		}
	}
}