Cod sursa(job #1378524)

Utilizator Vlad_lsc2008Lungu Vlad Vlad_lsc2008 Data 6 martie 2015 12:45:23
Problema Generare de permutari Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.19 kb
#include <iostream>
#include <fstream>
#define fin "permutari.in"
#define fou "permutari.out"
using namespace std;
ifstream t1(fin);
ofstream t2(fou);
int n,perm[11],k,l;

void sw(int a,int b)
{
    int t;
    t=perm[a]; perm[a]=perm[b]; perm[b]=t;
}

void rev(int p1,int p2)
{
    int mid,i;
    p2=n;
    mid=(p1+p2)/2;
    for(i=p1;i<=mid;i++) sw(i,p2-i+p1);
}

int finish()
{
    int ok=1,i;
    for(i=1;i<n;i++) if(perm[i]<perm[i+1]) ok=0;
    return ok;
}

void findem()
{
    int i;
    for(i=1;i<=n-1;i++)
        if(perm[i]<perm[i+1]) k=i;
    for(i=n;i>=k;i--) if(perm[i]>perm[k]) { l=i; break; }
}

int main()
{
    int i,j,ok=0,nr=1;;
    t1>>n;
    for(i=1;i<=n;i++) perm[i]=i;
    for(i=1;i<=n;i++) t2<<perm[i]<<' '; t2<<'\n';
    while(ok==0)
    {
        findem();
        sw(k,l);
        rev(k+1,l);
        //nr++; if(nr==4) ok=1;
        if(finish()==1) ok=1;
        for(i=1;i<=n;i++) t2<<perm[i]<<' '; t2<<'\n';
    }
   /* findem(); cout<<k<<' '<<l; cout<<'\n';
    sw(k,l);
    for(i=1;i<=n;i++) cout<<perm[i]<<' '; cout<<'\n';
    rev(k+1,l);
    for(i=1;i<=n;i++) cout<<perm[i]<<' ';*/
    t1.close();
    t2.close();
    return 0;
}