STL:提供了next_permutation这个工具;解决字典集的排列组合;
一、int整数
地址:https://www.luogu.com.cn/problem/P1618
int main(){
int a,b,c;
cin>>a>>b>>c;
for(int i=0;i<9;i++)s[i]=i+1;
int t=0;
do{
// printf("%d %d %d\n",cons(1),cons(2),cons(3));
if(cons(1)*b==cons(2)*a&&cons(2)*c==cons(3)*b){
cout<<cons(1)<<" "<<cons(2)<<" "<<cons(3)<<endl;
t=1;
}
}while(next_permutation(s,s+9));
if(!t)cout<<"No!!!";
return 0;
}
二、char数组
#include<bits/stdc++.h>
using namespace std;
int main(){
char a[4];
strcpy(a,"abcd");
do{
for(int i=0;i<4;i++){
cout<<a[i]<<" ";
}
cout<<endl;
}while(next_permutation(a,a+4));
return 0;
}
三、string字符串
#include<bits/stdc++.h>
using namespace std;
int main(){
string a="abcd";
sort(a.begin(),a.end());
do{
cout<<a<<endl;
}
while(next_permutation(a.begin(),a.end()));
return 0;
}
四、能否直接算出集合{1, 2, ..., m}的第n个排列? 举例说明:如7个数的集合为{1, 2, 3, 4, 5, 6, 7},要求出第n=1654个排列。
#include <iostream>
#include<algorithm>
using namespace std;
int main(int argc, char** argv) {
int a[7]={1,2,3,4,5,6,7};
sort(a,a+7);
int n=0;
do{
if(n==1654){
for(int i=0;i<7;i++)
cout<<a[i];
cout<<endl;
break;
}
n++;
}while(next_permutation(a,a+7));
return 0;
}