题目描述
有 nn (1≤n<10)(1≤n<10) 个升序排序的互不相同的数 aiai,求出:从中任取 rr (0<r≤n)(0<r≤n) 个数的所有组合情况。
输入格式
第一行输入 nn 、rr 。
第二行 nn 个正整数 aiai (1≤ai≤100)(1≤ai≤100) 。
输出格式
按特定顺序输出所有组合。
特定顺序:每一个组合中的值从大到小排列,组合之间按逆字典序排列。
输入、输出要求
要求使用「文件输入、输出」的方式解题,输入文件为 combine.in
,输出文件为 combine.out
代码上:
cpp
#include<bits/stdc++.h>
using namespace std;
int n,k;
int ans[105],p[105];
void dfs(int x,int sum){
if(x>=n){
if(sum==k){
for(int i=0;i<k;i++){
cout<<p[n-ans[i]]<<" ";
}
cout<<'\n';
}
return;
}
ans[sum]=x+1;
dfs(x+1,sum+1);
ans[sum]=0;
dfs(x+1,sum);
}
int main(){
freopen("combine.in", "r", stdin);
freopen("combine.out", "w", stdout);
cin>>n>>k;
for(int i=0;i<n;i++){
cin>>p[i];
}
dfs(0,0);
return 0;
}