【问题标题】:Generating Bulls and Cows secret word with given n String inputs使用给定的 n 个字符串输入生成 Bulls 和 Cows 密码
【发布时间】:2025-12-21 05:40:17
【问题描述】:

我在这个问题上卡了很长时间,它基本上是逆向工程牛牛游戏。 在这里阅读更多:http://rosettacode.org/wiki/Bulls_and_cows 我无法为下面给出的问题制定逻辑,如果您能想到解决方法,请发表相同的评论。

问题陈述:

给定几个线索词(形式为 ABCD/DBCA 等)以及每个词的奶牛和公牛数量,程序 应该能够通过评估给定的线索词来计算出实际的词并生成输出的秘密词。

测试用例:

输入: 4
DBCC 0 2
CDAB 2 1
CAAD 1 2
CDDA 2 0

输出: BDAA

【问题讨论】:

  • 除了输出“BDAA”不符合规则。您引用的页面说“没有重复”,但我看到一个双 A。当然,这只会让问题变得更难。
  • 哦,我提到了公牛和奶牛游戏的参考,无论如何都必须处理重复。
  • 我认为这更类似于 mastermind,因为您可以重复。算法应该会有所帮助:en.wikipedia.org/wiki/Mastermind_(board_game)

标签: algorithm logic


【解决方案1】:

这个想法是减少可能解决方案的空间。在开始之前,所有 4^4 组合都是可能的。阅读第一条线索 [DBCC 0 2 ] 后,您可以消除许多可能的解决方案,在这个特定示例中,您可以消除所有首先具有 D 的状态,所有具有 B 在第二位的状态等等在。只需消除所有不“适合”当前线索的可能解决方案。

对每条线索都这样做,直到只剩下一个解决方案。另一个有趣的问题当然是如何生成好的线索模式。

【讨论】:

  • 这似乎是一个很好的方法,我从生成字符串排列开始。非常感谢!
  • 当然,消除所有第一列有 Ds 的行只是一阶逻辑。您还需要消除至少有两个字符不是 DBCC 的任何状态。
  • 是的,赛斯是绝对正确的,我的回答并不意味着“完整”,因为我写的只是你可以从那个线索中推断出来的全部内容,我只是想指出你正确的方向。
  • 你能建议一种方法来处理形式 ABCD 1,2(1 Bull and 2 Cows)的线索吗?
【解决方案2】:

我的做法是: 1. 生成所有可能的单词,将它们放在一个列表(数组)中 2.随机选择其中一个(第一个问题)并寻求线索 3.取答案(假设是2,1) 4.开始将该问题与 第一个,第二个,...,到列表中的最后一个单词 5. 如果他们给出相同的线索:数一数,plac

【讨论】: