Pagini recente » Cod sursa (job #3145660) | Cod sursa (job #727800) | Cod sursa (job #801579) | Cod sursa (job #3135256) | Cod sursa (job #254700)
Cod sursa(job #254700)
#include<stdio.h>
#define infile "planeta.in"
#define outfile "planeta.out"
#define nmax 50
int viz[nmax];
int p[nmax]; //aici vom face permutarea
long long f[nmax]; //aici vom avea factorialul
long long nr,k; //permutarea pe care trebuei sa o facem
int ok;
int n; //lungimea permutarii
void bk(int x)
{
int i;
if(x>n) nr++;
if(nr==k)
{
for(i=1;i<=n;i++)
printf("%d ",p[i]);
ok=1;
}
else if(x<=n)
{
for(i=1;i<=n;i++)
if(!viz[i]&&!ok)
{
p[x]=i; viz[i]=1;
bk(x+1);
viz[i]=0;
}
}
}
int main()
{
int i,j;
freopen(infile,"r",stdin);
freopen(outfile,"w",stdout);
scanf("%d %lld",&n,&k);
bk(1);
/*for(f[0]=1,i=1;i<=n;i++) f[i]=i*f[i-1]; //calculam factorialul
for(i=1;i<=n;i++)
{
p[i]=(k/f[n-i])+1;
k-=((p[i]-1)*f[n-i]);
}
//renumerotam numerele de ordine al permutarii
for(i=n-1;i>=1;i--)
for(j=i+1;j<=n;j++)
if(p[j]>=p[i]) p[j]++;
//afisam permutarea
for(i=1;i<=n;i++) printf("%d ",p[i]);*/
fclose(stdin);
fclose(stdout);
return 0;
}