Cod sursa(job #1010688)

Utilizator impulseBagu Alexandru impulse Data 15 octombrie 2013 13:51:28
Problema Generare de permutari Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.16 kb
#include <stdio.h>

int fact (int n)
{
    int b = 1;
    for(int i = 2; i <= n; i++)
        b*=i;
    return b;
}

int main()
{
    int n;
    FILE* fr = fopen("permutari.in", "r");
    FILE* fw = fopen("permutari.out", "w");
    fscanf(fr, "%d", &n);

    int *A = new int[n];
    int *B = new int[n];
    for(int i = 0; i < n; i++)
        A[i] = i;
    int facto = fact(n);
    int k = 0;
    bool isPerm;
    while(facto > k)
    {
        isPerm = true;
        for(int i = 0; i < n; i++)
            B[i] = 0;
        for(int i = 0; i < n; i++)
        {
            B[A[i]]++;
            if(B[A[i]] > 1)
            {
                isPerm = false;
                break;
            }
        }
        if(isPerm)
        {
            k++;
            for(int i = 0; i < n; i++)
                fprintf(fw, "%d ", A[i] + 1);
            fprintf(fw, "\n");
        }
        int i = 1;
        while(i <= n)
        {
            A[n-i]++;
            if(A[n-i] == n)
            {
                A[n-i] = 0;
                i++;
            }
            else
                break;
        }
    }
    return 0;
}