for和while循环不在全局定义的函数中工作

时间:2018-05-26 11:30:34

标签: c++

#include <iostream>
#include <stdio.h>
#include <bits/stdc++.h>
using namespace std;

int help(int i,int money,int denomination[]){
    int sum=0;
    int j=0;
    while(i>0){
        if(i&1) sum+=denomination[j];
        i=i>>1;
        j+=1;
    }
    return sum==money?1:0;
}

int ans(int numOfNotes,int money,int denomination[]){
    for(int i=0;i<(1<<numOfNotes);i++){
        if(help(i,money,denomination)){
            return 1;
        }
    }
    return 0;
}  

int main() {
    int testCases,numOfNotes,money;
    cin>>testCases;
    while(testCases>0){
        cin>>numOfNotes>>money;
        int denomination[numOfNotes];
        int i=0;
        while(numOfNotes){
            cin>>denomination[i];
            i++;
            numOfNotes--;
        }
        testCases--;
        ans(numOfNotes,money,denomination)==1?cout<<"Yes"<<endl:cout<<"No"<<endl;
    }
    return 0;
}

如果存在数组denomination的子集,使其等于money,则程序应显示“是”,否则显示“否”。

但是对于以下简单的输入

1
3 3
1
1
1

输出即将出现

  

没有

然而它应该是

  

据我所知,forwhile循环在anshelp函数中不起作用。程序中还有其他错误吗?

1 个答案:

答案 0 :(得分:2)

您正在修改numOfNotes中内部while循环中的main,这意味着稍后传递给ans时其值为0。函数中的循环正在工作,你只是给它们超出预期的限制。

通过在调试器中逐步执行程序并检查变量值并控制流程,您可以轻松地自行解决此类问题。这是一项至关重要的编程技巧。另见Eric Lippert的How to debug small programs

与手头的问题无关,但请同时查看这些有关including bits/stdc++.hdeclaring using namespace std;出错的问题。