next_permutation的使用实例
要求:
//自己给出一个排列,求出该排列之后的第k个排列是啥。
//当给出的是最后一个排列是,下一个就是第一个排列
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int m=0;
cin>>m; //一共m组数据
while(m-->0) //对每组数据的处理方式一样,循环
{
//输入
int n=0,k=0;
cin>>n>>k;
int *arr = new int[n]; //new个数组存放n的全排列的n个数
for(int i=0;i<n;++i)
{
cin>>arr[i]; //输入全排列中的一个作为开始
}
//排列
int calculator =0; //初始化计数器,用来记录next_permutation所得的排列到第几个了
while(true)
{
//这种无限循环,不要忘了写结束条件,那就先写
//我们要得到自己输入已知序列之后的第k个排列的结果
if(calculator==k)
break;
if(!next_permutation(arr,arr+n))//arr[0,arr+n)注意这里是左闭右开
//next_permutation(num,num+n)函数是对数组num中的前n个元素进行全排列,同时并改变num数组的值。
//如果没有下一个排列,会返回false,否则返回true.
{
for(int j=0;j<n;++j)
{
arr[j]=j+1;// 返回第一个排列
}
}
calculator++; //计数器加一
}
//输出
cout<<arr[0];
for(int i=1;i<n;++i){
cout<<arr[i];
}
cout<<endl;
delete []arr; //清空数组,下次接着用
}
return 0;
}
结果测试: