简洁易懂带注释题解
2026-02-13 12:44:05
发布于:上海
1阅读
0回复
0点赞
这题有两个需要注意的点:
1.一个组合内不能有重复的数
2.所用数字相同的两个排列视为一个组合
可以将上述问题转化为:当前数必须比这个组合里前面的数大
#include<bits/stdc++.h>
using namespace std;
int n, r;
int num[23];
void dfs(int k){
if(k == r + 1){////当前组合数字数量已满
for(int i = 1; i <= r; i++){
cout << ' ' << num[i];
}
cout << endl;
return;
}
for(int i = num[k - 1] + 1; i <= n; i++){//i直接从num[k-1]+1开始遍历,便可以使得当前数比这个组合里前面的数都大
num[k] = i;
dfs(k + 1);//调用自身
}
}
int main(){
cin >> n >> r;
dfs(1);
return 0;
}
全部评论 1
制作不易,留赞后去
2026-02-13 来自 上海
1






有帮助,赞一个