#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
输出即将出现
没有
然而它应该是
是
据我所知,for
和while
循环在ans
和help
函数中不起作用。程序中还有其他错误吗?
答案 0 :(得分:2)
您正在修改numOfNotes
中内部while循环中的main
,这意味着稍后传递给ans
时其值为0。函数中的循环正在工作,你只是给它们超出预期的限制。
通过在调试器中逐步执行程序并检查变量值并控制流程,您可以轻松地自行解决此类问题。这是一项至关重要的编程技巧。另见Eric Lippert的How to debug small programs。
与手头的问题无关,但请同时查看这些有关including bits/stdc++.h
和declaring using namespace std;
出错的问题。