题目描述:从 1 到 n 中,任意选出 m 个数的所有排列,计算出方案数。
输入格式:两个整数n和m
输出格式:输出每一种方案以及方案数
样例
输入数据 1
4 3
输出数据 1
1 2 3
1 2 4
1 3 2
1 3 4
1 4 2
1 4 3
2 1 3
2 1 4
2 3 1
2 3 4
2 4 1
2 4 3
3 1 2
3 1 4
3 2 1
3 2 4
3 4 1
3 4 2
4 1 2
4 1 3
4 2 1
4 2 3
4 3 1
4 3 2
24
数据范围:1<=m<=n<=10
代码(加了臭氧优化也会T):
#include<bits/stdc++.h>
using namespace std;
int a[101]={0},n,m,ans=0;
bool b[101]={0};
void func(int k){
for(int i=1;i<=n;i++){
if(!b[i]){
a[k]=i;
b[i]=1;
if(k==m){
ans++;
for(int i=1;i<=m;i++) cout<<a[i]<<" ";
cout<<endl;
}
else func(k+1);
b[i]=0;
}
}
}
int main(){
cin>>n>>m;
func(1);
cout<<ans;
return 0;
}