首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >牛和牛.破译密码.算法

牛和牛.破译密码.算法
EN

Stack Overflow用户
提问于 2018-01-03 18:14:42
回答 1查看 2.2K关注 0票数 3

公牛和奶牛的游戏是由两名球员进行的。其中一个想到了一个4位密码(数字从0到9),然后,另一个玩家提出了一个建议。第一个玩家用正确放置的数字(公牛)和正确的数量(牛)来回应,但在错误的地方,数字(牛)。

我想写一个程序,它猜测秘密代码,然后读取公牛和奶牛的数量,然后再做一个猜测。我希望这一进程能够相对较快地结束。

代码语言:javascript
复制
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

这就是我用这个算法得到的结果。我不知道该如何进行。对我来说,最明显的方法是手动分析所有可能的公牛和奶牛的数量,但这只需要花费太多的时间和空间。你能给我一个提示,如果有一个普遍的方法来迎合所有可能的情况?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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个数字。然后,我们可以尝试不同的安排,再一次改变一次,以确定我们是越来越近还是更远。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48082947

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档