gpt4 book ai didi

java - 查找整数和任何操作数的组合以获得固定结果的算法

转载 作者:搜寻专家 更新时间:2023-10-31 20:10:08 25 4
gpt4 key购买 nike

我正在编写一个程序,将 4 个数字作为输入,然后尝试查看这四个数字的加减乘除组合是否可以使它们等于 24。我的方法是为每个可能的组合创建一个方法四个数字和四个操作数,有点冗长。这是 2 种方法的示例。

public static boolean add(int a, int b, int c, int d) {
boolean adBool;
adBool = a + b + c + d == 24;
return adBool;
}

public static boolean sub1(int a, int b, int c, int d) {
boolean subBool1;
subBool1 = a - b - c - d == 24;
return subBool1;
}

然后在我的 Main 中,我确实为每个方法创建了一个 while 循环,如果该方法返回 true,将打印它停止的方法是解决方案。这是一个例子。

while (add(num1, num2, num3, num4)) {
System.out.println("Your solution is "
+ num1 + " + " + num2 + " + " + num3 + " + " + num4
+ " = 24\nCongratulations!");
break;

}
while (sub1(num1, num2, num3, num4)) {
System.out.println("Your solution is "
+ num1 + " - " + num2 + " - " + num3 + " - " + num4
+ " = 24\nCongratulations!");
break;
}

有没有办法存储像 + 和 - 这样的操作数,这样我就可以把它们放在一个数组中,然后只使用一些嵌套的 for 循环来编写这个?

最佳答案

假设操作数是固定的,您可以创建一个生成器来转储可能的运算符,并将它们传递给评估器以确定它们是否为真。

while (generator.hasNext()){
Operators ops = generator.getNext();
if evaluatesTo(operand1, operand2, operand3, operand4, 24, ops){
// print it
}
}

一个简单的生成器可以这样完成:

List<String> list = new ArrayList<String>();
list.add("+++");
list.add("++-");
...
Iterator generator = list.iterator();

其中生成器实现了 java.util.Iterator 接口(interface),该接口(interface)使用所有运算符 (+-*/) 进行初始化并转储出所有大小为 3 的排列。

evalutesTo 方法简单地计算它:

public boolean (int operand1, int operand2, int operand3, int operand4, int total, Operators ops ){
// calculate operand1 "ops.get(0)" operand2 "ops.get(1)" operand3 "ops.get(2)" operand4 == total
}

所以如果 ops 是 [+-/] 它会检查

if (operand1 + operand2 - operand3 / operand4 == 24) return true;

我应该补充一点,您可以稍后添加各种效率,但您的问题是如何使用更好的策略来做到这一点。其他用户对细节有一些评论,但我现在不担心。首先你需要建立这样的框架,然后你可以担心细节。最关键的是,您不需要制作 100 多种外观相似的方法。

关于java - 查找整数和任何操作数的组合以获得固定结果的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33484438/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com