这是我的代码
#include <iostream>
#include <vector>
using namespace std;
int findat(string x, vector<string> &str, int np)
{
int loc;
for(int i=0; i<np; i++) if(x == str[i]) loc = i;
return loc;
}
int main()
{
int np; cin>>np;
vector <int> v(5);
fill(v.begin(), v.end(), 0);
vector <string> str; string buff;
for(int i=0; i<np; i++) cin>>buff; str.push_back(buff);
//Took names
int price, no, rem;
for(int i=0; i<np; i++)
{
cin>>buff;
cin>>price>>no;
v[findat(buff,str,np)]+=price%no;
for(int i=0; i<no; i++)
{
cin>>buff;
v[findat(buff,str,np)]+= price/no;
}
}
for(int i=0; i<np; i++)
{
cout<<str[i]<<" "<<v[i]<<endl;
}
}
这是USACO培训网关问题,您可以在http://www.spoj.com/problems/GIFT1/
找到在编译程序并运行它之后,我收到运行时错误,显示我的IDE已停止工作。我想知道我在哪里出错了,以及我是否可以以某种方式删除findat()函数。
findat()函数从数组中查找礼品赠送者的位置,即数组的索引。然后我使用索引来初始化main()函数中其他礼品赠送者的数量。我是所有这一切的新手,所以请建议我如何有效地删除一些代码行。
由于
答案 0 :(得分:1)
这里有一个问题:
for(int i=0; i<np; i++) cin>>buff; str.push_back(buff);
这与此相同:
for(int i=0; i<np; i++)
cin>>buff;
str.push_back(buff);
你想要的是这个:
for(int i=0; i<np; i++) {
cin>>buff;
str.push_back(buff);
}