Cod sursa(job #332814)

Utilizator LeocruxRadu Romaniuc Leocrux Data 20 iulie 2009 10:24:58
Problema Generare de permutari Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#include <fstream.h>
using namespace std;

ofstream out("permutari.out");
ifstream in("permutari.in");

void genpermutare(int n)
{
    int k, t, aux;
    int p[n];
    for(int i=1; i<=n; i++){ p[i]=i; out<<p[i]<<" "; if (i==n) out<<endl;}
   
   while(1)
   {
          k=n-1;
          while(p[k]>p[k+1]) k--; if(k<1)break; //1.gasim primul p[k]<p[k+1], daca nu este suntem la ultima permutare
          t=n;
          while(p[t]<p[k]) t--; //2.cautam primul t>k
          aux = p[t]; p[t]=p[k]; p[k]=aux; //3.interschimb t cu k
          for(int i=0; i<(n-k)/2; i++) {aux=p[k+1+i]; p[k+1+i]=p[n-i]; p[n-i]=aux;} //4.fuck this part! oglindesc p[k+1]...p[n]
          for(int i=1; i<=n; i++) {out<<p[i]<<" "; if (i==n) out<<endl;}
   }               
    
}

int main()
{   int a;
    in>>a;
    genpermutare(a);
    return 0;
}