gpt4 book ai didi

c - 我的 "won"函数有什么问题

转载 作者:行者123 更新时间:2023-11-30 19:06:57 26 4
gpt4 key购买 nike

我正在在线开发哈佛 CS50 的 PSET3,并且在 CS50 十五场游戏的“获胜”功能方面遇到问题。

该函数适用于 4x4 网格拼图,但不适用于 3x3

对于 3x3 的情况,该函数返回 true 早了几个步骤。

该函数需要在 2D 数组中查找按升序排列的数字(对于 3x3 大小的游戏,从 1 到 8;对于 4x4 大小的游戏,从 1 到 15),数组的最后一个元素为零。

我对代码的思考过程是,我将计数器最初设置为 1,并根据数组的第一个元素检查它。如果匹配,则将计数器增加 1,并对下一个元素重复。

如果计数器达到数组中的元素总数,则返回 true;如果计数器在任何时候与相应的数组元素不匹配,则返回 false。

你能看出我做错了什么吗?

/**
* Returns true if game is won (i.e., board is in winning configuration)
* else false.
*/
bool won(void)
{
// TODO

int counter = 1;

for (int i=0; i < d; i++)
{
for (int j=0; j < d; j++)
{
if (board[i][j] == counter)
{
counter++;
}
if (counter == (d*d))
{
return true;
}
}
}
return false;
}

最佳答案

如果所有元素都按顺序排列,则您的 won 例程将返回 true,忽略值为 0 的元素。因此,如果元素是:

1 2 3
_ 4 5
6 7 8

然后,当您的代码看到 1、2 和 3 时,它会递增 counter。当它看到 0 时,它不会递增 counter,其中 _如上所示。然后当它看到 4、5、6、7 和 8 时,它会增加 counter。然后 counter 是 9,所以它等于 d*d >,并且 won 返回 true。

从根本上来说,你的获胜例程太灵活了。在每一步中,如果当前元素等于 counter,它就会递增 counter,但否则它是被动的。也就是说,即使不满足所需的条件,它也会继续检查。由于只有一个“获胜”位置,因此如果有任何元素不在位置,您可以一看到它就返回 false

关于c - 我的 "won"函数有什么问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47350863/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com