使用小数字的数字的不同组成

时间:2014-08-22 17:11:41

标签: c++

这是GeeksforGeeks的问题。

你可以赢得三种篮球分,1分,2分和3分。给定总分n,打印出所有组合以组成n。我已经实现了以下解决方案。但我正在多次打印一些值。喜欢2,我正在

2
1 1
2
1 1

我无法找出它出错的地方。

#include<iostream>
#include<vector>

using namespace std;

void print(vector<int>& A){
    for(int i=0;i<A.size();i++)
        cout<<A[i]<<" ";
    cout<<endl;
}

void fun(int x,int m,vector<int>& A){
    for(int i=m;i>0;i--){
        if(x-i==0){
            A.push_back(i);
            print(A);
            A.pop_back();
        }
        else if(x-i>0){
            A.push_back(i);
            fun(x-i,i,A);
            A.pop_back();
        }
        else{
            fun(x,i,A);
        }
    }
}

int main(){
    int n;
    cin>>n;
    vector<int> A;
    fun(n,3,A);
}

1 个答案:

答案 0 :(得分:3)

您的代码有一个多余的电话......特别是部分

...
else {
    fun(x,i,A);
}

没有意义。

只有当您减去的点数没有超过或达到总数时,您才需要递归。您正确处理了两个案例(x-i==0)(x-i>0),但对于(x-i<0),您必须无所作为。