无法将多维数组传递给函数

时间:2019-06-04 10:18:31

标签: c++ arrays

我正在编写一个程序,以从数组的子集中查找给定的和是否可能。 (子集总和问题)。尽管Internet上有许多实现方式,但我选择自己编写代码。请提出适当的更正。我正在使用动态编程来做到这一点。

#include<iostream>

using namespace std;

bool subsetsum(int a[],int n,int s){

    bool T[n][s];

    for(int j=0;j<n;j++){
        T[j][0]=true;
    }
    for(int k=1;k<n;k++){
        T[0][k]=false;
        for(int l=1;l<n;l++){
            if((a[k]<s) && ((subsetsum(a,n-1,s-a[k])) || (subsetsum(a,n-1,s)))){
                T[k][l]=true;
            }
            else{
                T[k][l]=false;
            }
        }
    }
    return T[n][s];
}   

int main(){
    int n,s;
    int a[n];

    cout<<"Enter number of elements:\n";
    cin>>n;
    cout<<"Enter sum required\n";
    cin>>s;

    cout<<"Enter elements:\n";
    for(int i=0;i<n;i++){
        cin>>a[i];
    }

    cout<<subsetsum(a,n,s);
}

我获得的输出如下:

Enter number of elements:
3
Enter sum required
5
Enter elements:
1
4
2
0

我不明白为什么应该返回布尔值时得到0作为结果。

1 个答案:

答案 0 :(得分:1)

数组声明如下:

bool T[n][s];

,返回结果为:

return T[n][s];

可能您需要执行以下操作?

return T[n-1][s-1];

C ++中的数组索引从0开始。