Cod sursa(job #1658431)

Utilizator Vlad_317Vlad Panait Vlad_317 Data 21 martie 2016 15:10:00
Problema Generare de permutari Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.22 kb
#include <stdio.h>

using namespace std;

FILE *fin,*fout;

int n,st[101],k,x,a[7],j,max=0;


bool amsuccesor(int k)
{
    if(st[k]<n)
    {
        st[k]++;
        return 1;
    }
    return 0;
}
void init(int k)
{
    st[k]=0;
}
bool evalid(int k)
{
    int i;
    for(i=1;i<=k-1;i++)
        if(st[k]==st[i])
            return 0;
    return 1;
}
void tipar()
{
    int i;
    for(i=1;i<=n;i++)
        fprintf(fout,"%i ",st[i]);
    fprintf(fout,"\n");
}
int main()
{

    fin=fopen("permutari.in","r");
    fout=fopen("permutari.out","w");

    fscanf(fin,"%i%i",&n,&x);

    for(j=1;j<=x;j++)
        fscanf(fin,"%i",&a[j]);

    j=1;

    k=1;
    init(k);
    while(k>0)
    {
        if(amsuccesor(k))
        {
            if(evalid(k))
            {
                if(k==n)
                {
                    max++;
                    if(max==a[j])
                    {
                        tipar();
                        j++;
                    }
                }
                else
                {
                    k++;
                    init(k);
                }
            }
        }
        else k--;
    }

    return 0;

}