题解 | #递归实现组合型枚举#

递归实现组合型枚举

https://ac.nowcoder.com/acm/problem/50918

2021.11.10

#include<cstring>
using namespace std;
typedef long long ll;
ll n,m;
ll a[30];
void recursion(ll i,ll j){
    if(i == m){
        a[i]=j;
        for(int t =1;t <=m;t++){
            cout << a[t] <<" ";
        }
        cout << endl;
        return;
    }
    if(j == n) return;
    a[i]=j;
    for(int t = j+1;t<=n;t++)
        recursion(i+1, t);
}
int main(){
    cin >> n >>m;
    recursion(0,0);
    return 0;
}

本题的难点在于判断条件的情况,需要画出递归树,进行比较判断,我没有发现这个规律,在评论区中大佬的题解中,了解到了规律。 一开始我在主函数(第22行)里写

答案出错,在函数中(第18行)里的t写成了

        recursion(i+1,j+1);

结果最后改写成了如上代码。 附上图片,画的递归树, alt

全部评论

相关推荐

helloWord大王:这时候hr来个转人工我就真绷不住了
点赞 评论 收藏
分享
喜欢走神的孤勇者练习时长两年半:爱华,信华,等华,黑华
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务