一串数,分别为1~n,现在要从这n个数中选m个,求所有排列方式和组合方式。
# include<iostream>
# include<vector>
# define MAX 100
using namespace std;
int n,m; //n个中选m个
vector<int> v;
int a[MAX];
bool f[MAX];
void permutation(int k){
if(k==m){
for(int l=0;l<v.size();l++)
cout<<v[l]<<' ';cout<<endl;
return ;
}
for(int i=0;i<n;i++){
if(f[i]) continue;
f[i]=1;
v.push_back(a[i]);
permutation(k+1);
f[i]=0;
v.pop_back();
}
}
void combination(int k,int j){
if(k==m){
for(int l=0;l<v.size();l++)
cout<<v[l]<<' ';cout<<endl;
return ;
}
for(int i=j+1;i<n;i++){ //i=j+1避免出现相同的组合方式
if(f[i]) continue;
f[i]=1;
v.push_back(a[i]);
combination(k+1,i);
f[i]=0;
v.pop_back();
}
}
int main(){
cin>>n>>m;
for(int i=0;i<n;i++) cin>>a[i];
cout<<"排列数"<<endl;
permutation(0);
cout<<"组合数"<<endl;
combination(0,-1);
return 0;
}