HDU1027——Ignatius and the Princess II

题意:求从数字1到数字N的连续自然数的排列中第M小的数,要求产生的数字序列不允许出现重复的数字。

刚开始有点看懵了了啊==!就把它放弃了,无语。。。

其实就是简单的求N个数全排列,顺着数第M个就是了,泪奔了啊,以后不能这么二了==!

View Code
#include <stdio.h>
#include <string.h>
#define MAXN 10001

int n, m, num, sign;

void find(int len, int *a, bool *visit)
{
int i;
if(sign)
{
return ;
}
if(len > n)
{
num ++;
if(num == m)
{
sign = 1;
for(i=1;i<n;i++)
{
printf("%d ", a[i]);
}
printf("%d\n", a[i]);
return ;
}
}
else
{
for(i=1;i<=n;i++)
{
if(!visit[i])
{
a[len] = i;
visit[i] = 1;
find(len+1, a, visit);
visit[i] = 0;
}
}
}
}

int main()
{
int a[MAXN];
bool visit[MAXN];
while(scanf("%d%d", &n, &m) != EOF)
{
num = 0;
sign = 0;
memset(visit, 0, sizeof(visit));
find(1, a, visit);
}
return 0;
}

 

posted @ 2011-12-02 21:48  1050768624  阅读(217)  评论(0编辑  收藏  举报