这是我为 Topcoder SRM 编写的代码。但是这里有一个我无法弄清楚的段错误。你能帮我弄清楚吗?
问题是——
此任务是关于骰子游戏 Yahtzee 第一阶段的计分,其中使用了五个骰子。分数由滚动后向上模具面上的值决定。玩家可以选择一个值,所有显示所选值的骰子都被认为是活跃的。分数只是事件骰子上的值的总和。 例如,假设玩家最终的骰子面显示 2、2、3、5 和 4。选择值 2 会使显示 2 的骰子激活并产生 2 + 2 = 4 的分数,而选择 5 则一个模具显示 5 个活跃,得分为 5。 您的方法将以 vector throw 作为输入,其中每个元素代表骰子的正面,并返回具有这些值的最大可能分数。
约束 -
折腾恰好包含五个要素。 每个元素都会在 1 到 6 之间
#include <iostream>
#include <vector>
using namespace std;
class YahtzeeScore
{
public:
int maxPoints(vector<int> toss);
};
int YahtzeeScore::maxPoints(vector <int> toss)
{
vector<int> ret;
vector <int>::iterator v = toss.begin();
vector<int>::iterator w = toss.begin();
for (;v != toss.end(); v++)
{
int s=0;
for (;w != toss.end(); w++)
{
if ( w!=v && *w==*v) s++;
}
ret.push_back(s);
}
vector<int>::iterator it = ret.begin();
for (; it!=ret.end(); it++)
{
if (*v>*(v+1))
{
int temp = *v;
*v = *(v+1);
*(v+1)=temp;
}
}
return ret[4];
}
int main()
{
YahtzeeScore ob;
vector<int> something;
vector<int>::iterator it = something.begin();
while (it != something.end())
{
int a;
cin >> a;
something.push_back(a);
}
cout << ob.YahtzeeScore::maxPoints(something);
}
最佳答案
注意:您应该通过调试器运行它。
main() 中的这段代码:
vector<int>::iterator it = something.begin();
while (it != something.end())
it
永远是 something.end() 因为 something 是空的。这意味着它从不读取任何输入,这意味着您将一个空 vector 传递给 maxPoints
。 maxPoints
循环都不会运行,因为 toss
为空且 ret
为空。所以 ret[4]
会导致段错误。
如您所知,您需要 5 个输入,只需使用如下内容:
for (int i = 0; i < 5; i++)
{
int a;
cin >> a;
something.push_back(a);
}
关于c++ - vector 中的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23074890/