HDU 1027:http://acm.hdu.edu.cn/showproblem.php?pid=1027
有简便的方法是使用 next_permutation函数, 函数用途是返回下一个字典序。 需要<algorithm>头文件
除此之外,有必要知道如何手动的去得到下一个字典序。
一列数字,第一个为num[0] 一次标号。
1.从序列尾往前索引,找到第一个 num[i] ,满足num[i] < num[i + 1]
2.交换num[i]和num[i - 1]的位置
3.倒置从num[i+1]开始到最后的数。
得到的新序列,即为所求。
#include<stdio.h>
#include<algorithm>
using namespace std;
int main()
{
int a[1001],n,m,i;
while(~scanf("%d%d",&n,&m))
{
for(i = 0; i < n; i++)
{
a[i] = i + 1;
}
for(i = 0; i < m - 1; i++)
{
next_permutation(a,a+n);
}
for(i = 0; i < n - 1; i++)
{
printf("%d ",a[i]);
}
printf("%d\n",a[i]);
}
}