Cod sursa(job #1893950)

Utilizator AtanaseTeodorAtanase Alexandru-Teodor AtanaseTeodor Data 26 februarie 2017 11:58:47
Problema Generare de permutari Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.13 kb
#include <bits/stdc++.h>

using namespace std;

int a[16], n;

int main()
{
    ifstream fin("permutari.in");
    ofstream fout("permutari.out");
    int i, j, p, minim;
    fin >> n;
    for (i = 1; i <= n; i++)
        a[i] = i;
    /**
        1234567
        1234576
        1234657
        1234675
        1234756
        1234765
        1235467
    */
    int gata = 0;
    while (gata == 0)
    {
        /// afisare
        for (i = 1; i <= n; i++)
            fout << a[i] << " ";
        fout<<"\n";

        /// urmatoarea permutare
        i = n;
        while (i > 1 && a[i] < a[i - 1])
            i--;
        i--;
        if (i == 0) gata = 1;
        else
        {
            /// caut in a[i+1..n] cea mai mica valoarea
            /// mai mare decat a[i]
            p = i + 1; minim = a[i + 1];
            for (j = i + 1; j <= n; j++)
                if (a[j] > a[i] && a[j] < minim)
            {
                minim = a[j];
                p = j;
            }
            swap(a[i], a[p]);
            sort(a + i + 1, a + n + 1);
        }
    }
    fout.close();
    return 0;
}