Cod sursa(job #2450930)

Utilizator uvIanisUrsu Ianis Vlad uvIanis Data 24 august 2019 23:46:06
Problema Generare de permutari Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.94 kb
#include <fstream>

std::ifstream fin("permutari.in");
std::ofstream fout("permutari.out");
unsigned short p[9], N;


void next_permutation()
{
    unsigned short pozitie = N - 1;

    while(p[pozitie] > p[pozitie + 1])
    {
        pozitie--;
    }

    for(unsigned short i = 1; i <= (N - pozitie)/2; i++)
    {
        p[pozitie + i] ^= (p[N - i + 1] ^= (p[pozitie + i] ^= p[N - i + 1]));
    }


    for(unsigned short i = pozitie + 1; i <= N; i++)
    {
        if(p[pozitie] < p[i])
        {
            p[pozitie] ^= (p[i] ^= (p[pozitie] ^= p[i]));
            break;
        }
    }

}

int main()
{
    fin >> N;

    for(unsigned short i = 1; i <= N; i++) p[i] = i;

    size_t fact = 1;    for(unsigned short i = 1; i <= N; i++) fact *= i;

    while(fact)
    {
       for(unsigned short i = 1; i <= N; i++) fout << p[i] << ' ';
       fout << '\n';
       next_permutation();
       fact--;
    }
}