该计划的背景是涉及钉子和光盘的游戏。用户输入栓钉的数量(最多20个)和每个栓钉上的圆盘数量(最多10个)。考虑到有足够的光盘可以拆下那个挂钩,两个玩家会在每个转弯处来回移动任意数量的光盘。删除最后一张光盘的播放器丢失。
光盘的数量存储在一个数组中,其中数组的索引对应于挂钩编号。我有一个布尔函数,检查钉是否是空盘,暗示有人赢了。我的代码中存在一些逻辑错误,但我无法弄清楚它是什么:
bool checkPegs(int array[], int size)
{
int checker(0);
for (int i = 0; i < size; i++)
{
if(array[i] = 0)
{
return true;
}
else
{
return false;
}
}
}
答案 0 :(得分:2)
bool checkPegs(int array[], int size)
{
for (int i = 0; i < size; i++)
{
if(array[i] != 0)
{
return false;
}
}
return true;
}
答案 1 :(得分:0)
if(array[i] = 0)
这不会将array[i]
与0
进行比较,将 0
分配给array[i]
。你想要array[i] == 0
。
if(array[i] == 0)
{
return true;
}
else
{
return false;
}
第二个问题是你只检查第一个元素,然后根据它返回。您应该检查每个元素以确保它们不为零:
for (int i = 0; i < size; i++)
{
if(array[i] != 0) {
return false;
}
}
最后,您不处理size
为0
的情况。在这种情况下,您应该返回true
。
bool checkPegs(int array[], int size)
{
for (int i = 0; i < size; i++)
{
if(array[i] != 0) {
return false;
}
}
return true;
}
答案 2 :(得分:0)
这里有两个错误
bool checkPegs(int array[], int size)
{
int checker(0);
for (int i = 0; i < size; i++)
{
if(array[i] = 0) // the first one use '==' instead of '='
{
return true; // the second one, you are testing the first element only
}
else
{
return false;
}
}
}
这里应该如何
bool checkPegs(int array[], int size)
{
for (int i = 0; i < size; i++)
{
if(array[i] )
return false; // return false at the first found
}
return true; //all elements checked
}
答案 3 :(得分:0)
您编写代码的方式不起作用,因为您实际上只考虑第一个元素,因为return
中有两个if/else
语句。而且,您使用赋值语句而不是比较。
它遵循一个经过审查的例子:
bool checkPegs(int *array, int size) {
for (int i = 0; i < size; i++) {
if(array[i] != 0) { return false; }
}
return true;
}
请记住,它可以进行优化,您可以使用标准实用程序执行相同操作,但我认为您正在学习编码,因此值得为自己编写。
答案 4 :(得分:0)
尝试使用memcmp,而不要使用带有for循环的单独功能:
{{1}}