我需要尽可能给出最小的更改量。我输入的案例数量,每个案例都有一些硬币(1个不一定是其中的一部分)和我要测试的号码数量。然后我输入不同的硬币和不同的数字来测试。
我不知道为什么我的程序不起作用。由于1不一定是变更的一部分,我不得不稍微调整一下程序。
#include "stdafx.h"
#include<iostream>
#include<conio.h>
#include<functional>
#include<numeric>
#include<algorithm>
#include<vector>
using namespace std;
int main()
{
int n,i;
cin>>n;
int f=n,c,m;
int flag=0;
int m1;
int coins[100];
vector <int>storage(100,0);
vector <int> testcases(1000,0);
vector <int> answers(1000,-1);
while(n>0)
{
cin>>c;
cin>>m;
for(i=1;i<=c;i++)
{
cin>>coins[i];
}
for(i=1;i<=c;i++)
{
cin>>testcases[i];
}
m1=*max_element(testcases.begin(),testcases.end());
for(i=0;i<1000;i++)
{
answers[i]=-1;
}
i=0;
while(m1>=i)
{
i++;
flag=0;
for(int j=1;j<=c;j++)
{
if(i-coins[j]>=0)
{
storage[j]=answers[i-coins[j]];
flag=1;
}
else
storage[j]=-2;
}
if(flag==1)
{answers[i]=*min_element(begin(storage), end(storage),
[](int t1, int t2) {return t1 > 0 && (t2 <= 0 || t1 < t2);});
flag=0;
}
else
answers[i]=0;
}
if(m1==i)
{
for(int y=1;y<=m;y++)
{
cout<<answers[testcases[y]]<<endl;
}
}
}
return 0;
}
编辑:通过“不工作”我的意思是它实际上什么都不做。它接受输入而什么都不做。我认为它会进入无限循环。
答案 0 :(得分:3)
通用解决方案:在调试器下运行您的应用。进入代码,然后观察变量的值。与您期望的值进行比较。尝试再次编辑代码,重新编译和调试。在问题位置放置断点以快速跳转代码。
我看到#include "stdafx.h"
,这可能意味着您使用的是Visual Studio。这是一个指南:
Mastering Debugging in Visual Studio 2010 - A Beginner's Guide
答案 1 :(得分:2)
这段代码可能有很多问题(我没有测试过)但是一个导致无限循环的简单问题就是这个
while (n > 0)
{
// lots of code which never changes n
}
你有一个无限循环,因为在while (n > 0)
循环中没有任何地方可以修改n
的值。
我猜你想要这个
while (n > 0)
{
// lots of code which never changes n
--n;
}