Cod sursa(job #1017509)

Utilizator varga13VarGaz13 varga13 Data 27 octombrie 2013 20:20:50
Problema Generare de permutari Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.17 kb
#include <iostream>
#include <fstream>
#include <algorithm>
#define m 10
using namespace std;
ifstream f("permutari.in");
ofstream g("permutari.out");
int n,s[m],b[m];

void Initializare();
void Print();
void Permutari();
bool LargestCouple(int& k);
int LargestK(int k);
void Reverse(int k, int nn);


int main()
{
    f>>n;
    Permutari();
    f.close();
    g.close();
    return 0;
}

void Permutari()
{
    Initializare();
    int k,mx;

    bool ok;
    for(bool ok=true;ok;)
    {
      Print();
      ok=LargestCouple(k);
      //g<<k<<'\n';
      mx=LargestK(k);
     // g<<mx<<'\n';
      swap(s[mx],s[k]);
      //Print();
      Reverse(k+1,n-1);

    }
}

bool LargestCouple(int& k)
{bool ok=false;

    for(int i=0;i<n;++i)
        if(s[i]<s[i+1]) k=i, ok=true;

    return ok;

}

int LargestK(int k)
{
  for(int i=n-1;i>0;--i)
    if(s[i]>s[k]) return i;
}

void Reverse(int k,int nn)
{
    for(int i=k,j=nn;i<(k+nn)/2+1;++i,--j)
        swap(s[i],s[j]);
}

void Initializare()
{
    for(int i=0;i<n;++i)
        s[i]=i;
}

void Print()
{
    for(int i=0;i<n;++i)
        g<<s[i]+1<<' ';
    g<<'\n';
}