Cod sursa(job #1782102)

Utilizator Grama911Grama Andrei Grama911 Data 17 octombrie 2016 19:32:27
Problema Generare de permutari Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.83 kb
#include <cstdio>
#define swap(a,b) a=a^b;b=a^b;a=a^b

int next_perm(int a[],int n)
{
    int k=n-1;//k=indicele de "rupere" al permutarii <=> a[k]<a[k+1] shi de la
    while(k&&a[k]>a[k+1])k--;//a[k+1] incolo sunt toate descrescatoare
    if(!k)return 0;
    //determin l=indicele celui mai mic dintre elem. de dupa a[k] mai mare dekt a[k]
    int l=n,s,d;
    while(a[k]>a[l])l--;
    swap(a[k],a[l]);
    s=k+1;d=n;
    while(s<d)
    {
        swap(a[s],a[d]);
        s++;d--;
    }
    return 1;
}

int main()
{
    int a[20],n,i;
    FILE *f=fopen("permutari.in","r");
    fscanf(f,"%d",&n);fclose(f);
    f=fopen("permutari.out","w");
    for(i=1;i<=n;i++)a[i]=i;
    do
    {
        for(i=1;i<=n;i++)
            fprintf(f,"%d ",a[i]);
        fprintf(f,"\n");
    }while(next_perm(a,n));
    return 0;
}