2014-11-25 63 views
-1

24遊戲是一個算術遊戲,其目的是找到一種方法來操縱四個整數,使最終結果爲24.加法,減法,乘法或除法的任何數字順序可用於使四位數的運算從一到九等於24.數學二十四遊戲Java

規則很簡單:你只需要使用每個數字一次,只有從用戶讀取的4個數字才能找到一個方程來獲得24.

例如,對於數字4,7,8,8,可能的解決方案是:(7-(8/8))* 4 = 24。

大多數套4位可以導致24多個方程可以使用:例如,輸入:2,2,4和7可以以多種方式被使用,以獲得24:

2 + 2 * (4 + 7)= 24

2 + 2 *(7 + 4)= 24

(2 + 2)* 7-4 = 24

(2 * 2)* 7-4 = 24

2 *(2 * 7)-4 = 24

也有4個數字的組合不能導致等於24的任何等式。例如1,1,1,1。在這種情況下,你的程序應該返回,沒有可能的方程式等於​​24.

注意:雖然我們將在1和9之間輸入4個整數,但我們將使用雙精度來計算所有操作。例如,數字3,3,8,8可以合併到公式中:8 /(3-8/3)= 24.

工作流程:您的程序應該讀取用戶的4個數字並輸出公式,結果爲24.算法應枚舉所有可能的4個數字的順序,所有可能的組合和所有可能的公式。這個項目沒有必要的圖形用戶界面,我需要一種方法來解決所有64個可能的組合中的操作符問題,因此每個方程中使用4個運算符和3個運算符,並在方程式中考慮括號。我不知道從哪裏開始。

+3

''我不知道從哪裏開始。「'遞增編寫你的程序。首先編寫一個接受用戶輸入並打印出來的程序。然後開始添加功能,直到它完成您需要的一切。 – azurefrog 2014-11-25 03:45:17

+0

我做了那部分我只是需要幫助來弄清楚功能。我將如何去編寫一個方法來攪亂運營商以產生每個可能的方程。我寫了一個排列方法,它返回一個2d數組和24個abcd組合。我只是想知道如何實際實現另一種方法來讓操作員形成方程式。 – n94pro 2014-11-25 03:56:47

+0

顯示你寫的代碼。 – 2014-11-25 04:57:02

回答

1

如果您可以生成一個字符串的排列。您需要爲所有數字都做這些,以便爲這些數字獲得所有可能的排列組合。

現在你只需要插件操作符的排列(每次3個)。

爲此,您可以生成操作符的所有排列並將它們存儲在一個數組中,因爲這對每種情況都會保持不變。並且,在生成的每個排列中,只需選取前3個字符,因爲我們正在查看4個可能中的3個組。

一旦你有了這些,只需要閱讀數字的排列組合,然後閱讀操作符的排列和評估表達式。

作爲參考,我做了一個簡單的demo函數,該函數可以查找Java中字符串的排列。遞歸函數看起來類似(從relevant SO後):

public void permut(String str1,String str2){ 
    if(str2.length() != 0){ 
    char ch = str2.charAt(0); 
    for(int i = 0; i <= str1.length();i++) 
     permut(str1.substring(0,i) + ch + str1.substring(i,str1.length()), 
       str2.substring(1,str2.length())); 
    }else{ 
    System.out.println(str1); 
    } 
} 

如果你能成功地生成字符串的所有排列,上述演習應該是可行的。我希望它能讓你開始朝正確的方向發展。

+0

其有用.... – GvSharma 2014-11-25 09:15:39

+0

我想你錯過了可以隨機設置的事實。 – Turakar 2014-11-28 07:10:58

+0

如果你嘗試所有的排列組合,我認爲操作符的優先級將會處理括號。括號只是爲表達式生成不同的排列方式。 – 2014-11-28 16:42:50