如何以编程方式解决这个谜题?有人可以帮我处理一些伪代码吗?
九点九
将9个9与任意数量的运算符组合+, - ,*,/,(,),什么是无法表达的最小正整数?
提示:
答案不是零。你可以像这样表达零: (9 - 9)*(9 + 9 + 9 + 9 + 9 + 9 + 9)。 此外,零不是正整数。
答案不是一个。你可以这样表达一个: 9 - (9 * 9 - 9)/ 9 + 9 - 9 + 9 - 9
这不是一个技巧问题。
请务必正确处理括号。
备注:
这实际上是一个着名的谜题,可能有许多解决方案在互联网上徘徊。我不确定他们中的任何一个是否正确。有没有人有一个解释得很好的解决方案?
答案 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)