首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >数学二十四游戏Java

数学二十四游戏Java
EN

Stack Overflow用户
提问于 2014-11-25 03:42:57
回答 1查看 4.6K关注 0票数 0

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个操作符,并且考虑到了方程中的括号。我不知道从哪里开始。

EN

回答 1

Stack Overflow用户

发布于 2014-11-25 04:52:13

如果可以生成字符串的排列。你需要对所有的数字都这样做,才能得到所有这些数字可能的排列。

现在,您只需要插件运算符的排列(每次3)。

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

一旦你有了它,这就是一个简单的问题,就是读取数字的排列,然后读取运算符的排列,并计算表达式。

作为参考,我对一个函数做了一个简单的demo,该函数在Java中查找字符串的排列。递归函数看起来类似于(来自relevant所以Post):

代码语言:javascript
运行
复制
 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);
  }
 }

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27118479

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档