如何以编程方式解决九谜之谜?

时间:2010-12-17 20:34:34

标签: algorithm puzzle

如何以编程方式解决这个谜题?有人可以帮我处理一些伪代码吗?

九点九

将9个9与任意数量的运算符组合+, - ,*,/,(,),什么是无法表达的最小正整数?

提示:

  1. 答案不是零。你可以像这样表达零: (9 - 9)*(9 + 9 + 9 + 9 + 9 + 9 + 9)。 此外,零不是正整数。

  2. 答案不是一个。你可以这样表达一个: 9 - (9 * 9 - 9)/ 9 + 9 - 9 + 9 - 9

  3. 这不是一个技巧问题。

  4. 请务必正确处理括号。

  5. 备注:

    • 您不能使用取词。
    • 你无法连接(例如, 将两个9组合在一起制作99)。
    • - 运算符可用于任何一个 二进制或一元形式。
    • 假设基地10。

    这实际上是一个着名的谜题,可能有许多解决方案在互联网上徘徊。我不确定他们中的任何一个是否正确。有没有人有一个解释得很好的解决方案?

2 个答案:

答案 0 :(得分:8)

答案是195,这是一些Python代码,它通过从exp1 OP exp2形成新的表达式来构建所有可能的表达式。它在我的电脑上运行0.165秒。

exp = [set() for _ in xrange(10)]
exp[0].add(0)
exp[1].update([9, -9])
for i in xrange(1, 10):
  for a in list(exp[i]):
    for j in xrange(i, 10):
      for b in list(exp[j-i]):
        exp[j].update([a+b, a-b, a*b])
        if b != 0:
          exp[j].add(a/b)

n = 0
while n in exp[9]:
  n += 1
print n

编辑: 如果答案必须是精确整数(而不仅仅是整数除法的舍入结果),则必须在除法完成时进行检查。

    if ((b != 0) and ((a/b) == float(a)/b)):
      exp[j].add(a/b)

根据对规则的这种解释,新的答案是138。 (现有版本计算1386/10 [或-1386 / -10]并获得138)

答案 1 :(得分:6)