当前位置: 首页 > 知识库问答 >
问题:

检查所有可能等于给定4个整数的某个数字的表达式?

祖翰音
2023-03-14
import java.util.Scanner;

public class Game24 {

    public static void main(String[] args) {
        System.out.println("Enter 4 numbers and hit enter after each number: ");
        Scanner input = new Scanner(System.in);
        String num1 = input.nextLine();
        String num2 = input.nextLine();
        String num3 = input.nextLine();
        String num4 = input.nextLine();
        StringPermutation("", num1 + "+" + num2 + "*" + num3 + "/" + num4 + "(" + ")");
    }

    public static String StringPermutation(String x, String y) {
        double expression = 0;
        int count = 0;

        if (y.length() <= 1) {
            try {
                for (int i = 0; i < y.length(); i++) {
                    String p = y.substring(0, i) + y.substring(i + 1);
                    expression = Double.parseDouble(StringPermutation(x + y.charAt(i), p));
                }

                if (y.length() <= 1 && expression == 24) {
                    do {
                        count++;
                        System.out.println(x + y);
                    } while (count < 1);
                }

                //if (y.length() <= 1 && expression != 24) {
                //    System.out.print("No solution");
                //}
            } catch (Exception e) {}

        } else {
            for (int i = 0; i < y.length(); i++) {
                String p = y.substring(0, i) + y.substring(i + 1);
                StringPermutation(x + y.charAt(i), p);
            }
        }
        return "";
    }
}

共有1个答案

仲孙飞文
2023-03-14

以下是一些可能有助于您入门的设计提示:

>

  • 当前转换为字符串然后测试排列的设计很差。它很难理解,而且容易出错。更好的方法是在计算表达式结果时构建表达式字符串。
  • 生成解决方案列表的递归方法的一般形式如下:

    List solutions=new ArrayList<>();测试(partialSolution,startingContext);

    class Expressions {
        private final Set<String> validExpressions = new TreeSet<>();
    
        public Expressions(int expectedResult, int... operands) {
            test("" + operands[0], operands[0], Arrays.copyOfRange(operands, 1, operands.length);
        }
    
        private void test(String currentExpression, int currentResult, int... operands) {
            if (operands.length > 0) {
                ...
            } else if (currentResult == result) {
                 validExpressions.add(expression + " = " + result);
            }
        }
    }
    

  •  类似资料:
    • 如何编写一个递归回溯函数,在该函数中,它打印所有的N位数字,使数字中每3个连续数字的总和正好等于S,其中N小于或等于10,并且是从0到27。 代码: 示例输出: 我很困惑如何递归地写这个。

    • 问题内容: 我有一个数字清单。我也有一定数目 该总和由我列表中的几个数字得出(我可能/可能不知道它是由多少个数字组成的)。是否有一种快速算法来获取可能的数字列表?用Python编写会很棒,但是伪代码也很好。(除Python:P之外,我什么都看不到) 例 注意: 我确实知道算法,可以从大小为n的列表中找到哪些数字总和为另一个数字(但是我无法读取C#,也无法检查它是否满足我的需求。我在Linux上,尝

    • 问题内容: 我正在使用AndEngine将精灵添加到屏幕上,并使用movemodifier方法遇到。 我有两个整数MaxDuration和MinDuration; 我想要做的是当用户达到一定增量的分数时。 例如,当用户达到20(整数改变)时,用户达到40(整数改变)。因此,基本上是20分,每次得分遇到一个20分之一的数字,即整数的变化。我希望这是有道理的。 有什么方法或方法可以做到这一点吗?我有一

    • 我正试图找出如何计算两个int(a和b)之间的所有数字,其中所有数字都可以与另一个int(k)整除,0作为除数。这是我到目前为止所做的,但它永远都是循环的。 此外,我还考虑通过计数这些数字并与位数进行比较来比较是否所有的数字都是可整除的 如有任何帮助,不胜感激。谢谢!

    • 可能的子集:- 我只能想到一个朴素的算法,它列出集合的所有子集,并检查子集和是否>=k,但它是一个指数算法,列出所有子集需要O(2^n)。我能用动态规划在多项式时间内求解吗?

    • 如果我有数字,从,其中数字在两者之间缺失,那么我如何计算所有可能的数字,可以从这些数字的加法中形成(2/3/4/5/6...)。 例如,假设我有数字,即缺少和。现在,我可以形成 这是我需要找出的,这是我无法使用给定数字组合形成的1中的第一个数字。一个简单的逻辑就可以了。谢谢!