题目链接 http://acm.nyist.net/JudgeOnline/problem.php?pid=366
这道题是c++ STL里的next_permutation()函数的应用。
先讲一下next_permutation()函数的用法。
需要用到的头文件 #include<algorithm>
next_permutation()函数是按照字典序进行全排列
prev_permutation()函数是按照逆字典序进行全排列,它们的用法一样,只是函数名字不一样
进行全排列前,必须把数组元素进行性小到大排序
其中next_permutation()函数 的括号里分两部分内容,第一部分内容是一个数组的起始位置(即数组名),第二部分是一个数组的结束位置(即数组名+数组长度)。比如说想要对数组a[]={1,2.3}进行全排列。那么主要代码为:
do { cout<<a[0]<<a[1]<<a[2]<<endl; }while(next_permutation(a,a+3));
本题代码:
#include<iostream> #include<algorithm> using namespace std; int main() { int n,x,a[15]; cin>>n; while(n--) { cin>>x; for(int i=0;i<=x-1;i++) a[i]=i+1; sort(a,a+x); do { for(int i=0;i<=x-1;i++) cout<<a[i]; cout<<endl; }while(next_permutation(a,a+x)); } return 0; }