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个在每个方程中使用,并在方程式中考虑括号。我不知道从哪里开始。
答案 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);
}
}
如果您可以成功生成字符串的所有排列,则上述练习应该是可行的。我希望它能让你开始朝着正确的方向前进。