【问题标题】:Math twenty four game Java [duplicate]数学二十四游戏Java [重复]
【发布时间】:2014-11-25 03:42:57
【问题描述】:

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 的方程。

注意:虽然我们将输入 4 个介于 1 和 9 之间的整数,但我们将使用双精度数来计算所有操作。例如,数字 3,3,8,8 可以组合成公式:8/(3-8/3) = 24。

工作流程:您的程序应该从用户那里读取 4 个数字并输出一个得出 24 的公式。算法应该枚举 4 个数字的所有可能顺序、所有可能的组合以及所有可能的公式。这个项目不需要 GUI 我需要一种方法的帮助,该方法将对所有 64 个可能的组合的运算符进行洗牌,因此每个方程中使用了 4 个运算符和 3 个运算符,并且还考虑了方程中的括号。我不知道从哪里开始。

【问题讨论】:

  • "I have no idea where to begin." 逐步编写程序。首先编写一个程序,接受用户的输入并将其打印出来。然后开始添加功能,直到它完成您需要的所有操作。
  • 我做了那部分我只是需要帮助来弄清楚功能。我将如何编写一种方法来对运算符进行洗牌以生成每个可能的方程。我编写了一个置换方法,它返回一个包含 24 个 abcd 组合的二维数组。我只是想知道如何实际实现另一种方法来让运算符形成方程。
  • 显示你写的代码。

标签: java algorithm math for-loop recursion


【解决方案1】:

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

现在您只需要插入运算符的排列(一次 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);
  }
 }

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

【讨论】:

  • 我认为你错过了括号可以随机设置的事实。
  • 如果您尝试所有排列,我想括号将由运算符优先级处理。括号只是为表达式生成不同排列的一种方式。
猜你喜欢
  • 2014-02-19
  • 2012-07-13
  • 1970-01-01
  • 2013-09-14
  • 2013-10-08
  • 2021-05-29
  • 1970-01-01
  • 1970-01-01
  • 2023-03-21
相关资源
最近更新 更多