Cod sursa(job #345683)

Utilizator alexandru92alexandru alexandru92 Data 4 septembrie 2009 10:53:11
Problema Generare de permutari Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.91 kb
/* 
 * File:   main.cpp
 * Author: speedemon
 *
 * Created on September 3, 2009, 1:07 PM
 */

#include <stdio.h>
#include <stdlib.h>

/*
 * 
 */
inline bool permutation ( int v[], int n )
{
    int i=n-2;
    while ( ( i >= 0 ) &&  ( v[i] > v[i+1] ) ) --i;
    if( i< 0 ) return false;
    int j=n-1;
    while( v[i] > v[j] ) --j;
    v[i]+=v[j]; v[j]=v[i]-v[j]; v[i]-=v[j];
    int k=0;
    for( j=i+1; j < (n+i+1)/2; ++j,++k )
    {
        v[j]+=v[n-k-1];
        v[n-k-1]=v[j]-v[n-k-1];
        v[j]-=v[n-k-1];
    }
    printf("\n");
    for( i=0; i<n; ++i ) printf("%d ",v[i]);
    return true;
}
int main(int argc, char** argv)
{int *v;
int n,i;
bool ok=true;
    freopen("permutari.in","rt",stdin);
    freopen("permutari.out","wt",stdout);
    scanf("%d",&n);
    v=(int*)calloc(n,sizeof(n));
    for( i=0; i<n; ++i ) v[i]=i+1,printf("%d ",v[i]);
    while( permutation( v,n ) );
    free(v);
    return EXIT_SUCCESS;
}