2010-12-17 46 views
3

如何以編程方式解決這個謎題?有人可以幫我一些僞代碼或什麼?如何以編程方式解決Nine 9的謎題?

九787-9

結合9個9與任意數量的經營者+, - ,*,/,(,),有什麼是不能表示最小的正整數?

提示:

  1. 答案是不爲零。你可以像這樣表示零: (9-9)*(9 + 9 + 9 + 9 + 9 + 9 + 9)。 另外,零不是正整數。

  2. 答案不是一個。你可以這樣表達: 9 - (9 * 9 - 9)/ 9 + 9 - 9 + 9 - 9

  3. 這不是一個詭異的問題。

  4. 務必正確處理圓括號。

注:

  • 不能使用冪。
  • 你不能連接(例如, 把兩個9放在一起做成99)。
  • - 運算符可以用於其二進制或一元形式的 。
  • 假設基地10

這實際上是一個著名的拼圖,並可能有許多解決方案,徘徊在互聯網。我不確定他們中的任何一個是否正確。有人有一個很好解釋的解決方案嗎?

+0

是運算符重載錄取? :S – 2010-12-17 20:37:10

+0

@:closers:爲什麼脫主題?介意解釋一下? – Quixotic 2010-12-17 20:37:25

+2

我把這看作是題外話題,主要有兩個原因。(1)這個問題基本上與編程沒有任何關係 - 這是一個**數學**問題。 (2)你想解決一個特定的問題嗎?你想創建一個'Code Golf'問題嗎?你試過什麼了?我沒有看到這方面的任何內容。 ...你的美元符號符號怎麼了? – 2010-12-17 20:43:51

回答

8

答案是195,這裏是一些Python代碼,只需從exp1 OP exp2形成新的表達構建了所有可能的表達式。它在我的電腦上以0.165s運行。

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年至1310年[或-1386/-10],並得到138)

相關問題