b. 组合数
题目描述
有 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
代码上:
#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;
}