公牛和奶牛的游戏是由两名球员进行的。其中一个想到了一个4位密码(数字从0到9),然后,另一个玩家提出了一个建议。第一个玩家用正确放置的数字(公牛)和正确的数量(牛)来回应,但在错误的地方,数字(牛)。
我想写一个程序,它猜测秘密代码,然后读取公牛和奶牛的数量,然后再做一个猜测。我希望这一进程能够相对较快地结束。
1. Create a 4-dimensional boolean array 10 x 10 x 10 x 10
2. Set all elements of this array to true, bulls = 0, cows = 0
3. While bulls != 4
3.1. Find the first element of the array which is set to true
3.2. Make a guess with this number
3.3. Read the number of bulls and cows
3.4. If bulls = 0 and cows = 0
set all codes containing any of the digits from the last code to false这就是我用这个算法得到的结果。我不知道该如何进行。对我来说,最明显的方法是手动分析所有可能的公牛和奶牛的数量,但这只需要花费太多的时间和空间。你能给我一个提示,如果有一个普遍的方法来迎合所有可能的情况?
发布于 2018-01-04 15:06:06
这个游戏让我想起了游戏约托,在这个游戏中,两个玩家选择单词,然后尝试猜出对方的单词,只会被告知实际单词中有多少字母(在Jotto中有很大的不同,只有实际的单词可以使用)。
我的第一步将是识别4头牛/公牛。这样我们就可以得到所有的4位数字,然后我们就可以担心订单是否正确。
为了识别4头牛/公牛,我们首先猜测4个随机数。如果我们运气好,牛+牛= 0,那么我们就可以消除所有这4个数字。否则,我们会改变我们的猜测一次一个数字。假设我们用a,b,c,d来猜测,然后我们用a,b,c,e猜测。
如果奶牛和公牛在下一次猜测后下降1,我们可以得出结论,我们去掉的数字(d)是一头牛或公牛,而新的数字(e)不是牛或公牛。
如果牛+公牛不改变,那么要么d和e都是牛/公牛,要么既不是牛/公牛,也不是牛/公牛。我们可以尝试另一个数字(f),直到我们看到一个变化,并从中得出结论。
如果牛+牛上升1,那么我们可以得出结论:e是牛/牛,d既不是牛也不是牛。
我们将继续这样做,直到我们有了所有的4个数字。然后,我们可以尝试不同的安排,再一次改变一次,以确定我们是越来越近还是更远。
https://stackoverflow.com/questions/48082947
复制相似问题