6 411 8 Sample Output1 2 3 5 6 41 2 3 4 5 6 7 9 8 11 10解题思路:题目意思就是给出一个数N,则它有一个序列1~N,求它全排列的第M小数。例如第一组测试数据6 4第一小全排列 1 2 3 4 5 6第二小全排列 1 2 3 4 6 5第三小全排列 1 2 3 5 4 6第四小全排列 1 2 3 5 6 4则答案就是1 2 3 5 6 4只要读懂了题目的意思,就不要担心了。因为STL中有一个求全排列的函数可以帮我们解决这个问题。头文件algorithm中包含一个函数next_permutation可以求全排列,那么这个题就变得非常简单了,加上头文件,然后直接调用函数就可以了。#include <iostream>#include <stdio.h>#include <string.h>#include <algorithm>#include <queue>#include <string>using namespace std;int a[100000];int main(){ int m,n,i; while(~scanf("%d%d",&m,&n)) { for(i = 0; i < m; i++) a[i]=i+1; n = n-1; //第一个数是第一个排列数 while(n--) { next_permutation(a,a+m); } printf("%d",a[0]); for(i = 1; i < m; i++) printf(" %d",a[i]); printf("/n"); } return 0;}
新闻热点
疑难解答