2015-10-07 72 views
-3

通過使用9到9的數字,你應該找到使用乘法和加法得到N的方法的數量。我真的不知道從哪裏開始

例如,如果100被給予,你會回答7.

的原因是,有7種可能的方式。

100 = 1*2*3*4+5+6+7*8+9 

100 = 1*2*3+4+5+6+7+8*9 

100 = 1+2+3+4+5+6+7+8*9 

100 = 12+3*4+5+6+7*8+9 

100 = 1+2*3+4+5+67+8+9 

100 = 1*2+34+5+6*7+8+9 

100 = 12+34+5*6+7+8+9 

如果這個問題給了你,你會如何開始?

+0

系統地思考問題。九位數字之間有八個位置。每個可以被'*','+'或''(連接)佔用。你需要循環所有八個位置的所有三種可能性。那麼你將不得不有一些方法來表示操作的順序和一些用算術方法來評估它的方法。 – zwol

+1

這個問題最好在http://math.stackexchange.com/上提供,因爲這個問題不是關於編程。 – jmargolisvt

+1

可能有一些聰明的數學技巧,避免在這裏做一個詳盡的搜索,但我不知道它。 – zwol

回答

1

我們是否允許使用圓括號?這將大大增加可能性的數量。

我會試着找到第一個加法項,比如說1×23,首先。這些數量有限,而且由於我們無法減去,所以我們知道如果我們得到一個高於我們目標的術語,我們可以從我們的搜索中修剪它。這就讓我們尋找23 + f = 100的解決方案,其中f是完全相同形式的另一個公式。但這與解決數字4-9和目標77的原始問題完全相同!因此,請遞歸地調用您的算法,並將該子問題的解決方案添加到原始問題的解決方案中。也就是說,如果我們有23 + 4,是否有任何解決方案的子問題編號5-9和n = 73?分而治之。

您可能會從部分解決方案的動態表中受益,因爲您可能會以不同的方式獲得相同的子問題:1 + 2 + 3 = 1×2×3,因此可以用數字4-9和目標94兩次重複工作。

根據最先約束的原則,您可能最好從右到左比從左到右。 89,8×9或78 + 9比1 + 2 + 3,1×2×3,12×3,12 + 3或1×23留下的空間更小。

+0

不允許我們不允許使用括號 – Lebanner

+0

這對我來說意義重大。謝謝。 – Lebanner

+0

@Lebanner添加了關於從哪個方向進行搜索的註釋。 – Davislor

1

有三種可能的操作

addition 
    multiplication 
    combine, for example combine 1 and 2 to make 12 

有每個操作員8個位置。因此,總共有3^8 = 6561個可能的方程。所以我會從

for (i = 0; i < 6561; i++) 
+0

我不認爲聯合經營有八個職位。 12和21是兩個不同的數字。所以有72個不同的兩位數字,如果N是1,000,000,那麼我們可能需要3,4和甚至5位數字,並且有很多。 –

+0

@JerryJeremiah在問題中沒有跡象表明您可以更改數字的順序。如果您可以對數字進行重新排序,則會有多於7種解決方案,例如'1 + 2 * 3 + 4 + 65 + 7 + 8 + 9'​​ – user3386109

+0

夠公平的。我一定誤解了這個問題。 –