数学二十四游戏Java

时间:2014-11-25 03:42:57

标签: java algorithm math for-loop recursion

24游戏是一种算术游戏,其目标是找到一种操纵四个整数的方法,使得最终结果为24.可以使用任何数字顺序的加法,减法,乘法或除法来制作从1到9的四位数运算相等24.

规则很简单:你只需要使用每个数字一次,只使用从用户那里读取的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个数字的所有可能顺序,所有可能的组合和所有可能的公式。这个项目没有必要的GUI我需要一个方法来帮助所有64种可能的组合运算符,所以4个运算符和3个在每个方程中使用,并在方程式中考虑括号。我不知道从哪里开始。

1 个答案:

答案 0 :(得分:2)

如果您可以生成字符串的排列。您需要对所有数字执行此操作以获得这些数字的所有排列。

现在你只需要插入运算符的排列(一次3个)。

为此,您可以生成运算符的所有排列并将它们存储在数组中,因为对于每种情况,它都将保持不变。在生成的每个排列中,只需选择前3个字符,因为我们正在查看4个可能中的3个组。

一旦掌握了这一点,只需阅读数字的排列,然后阅读运算符的排列并评估表达式。

作为参考,我创建了一个简单的demo函数,用于查找Java中字符串的排列。递归函数看起来像(来自relevant SO Post):

 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);
  }
 }

如果您可以成功生成字符串的所有排列,则上述练习应该是可行的。我希望它能让你开始朝着正确的方向前进。