24点游戏算法java
时间: 2023-10-12 16:04:51 浏览: 107
24点游戏是一种数学游戏,目标是使用四个给定的数字通过加、减、乘、除等运算得到结果为24的表达式。下面是一个简单的Java算法实现:
```java
import java.util.ArrayList;
import java.util.List;
public class Game24 {
private static final double TARGET = 24.0;
private static final double EPSILON = 1e-6;
public static void main(String[] args) {
int[] nums = {4, 7, 8, 8};
List<String> solutions = solve24(nums);
if (solutions.isEmpty()) {
System.out.println("无解");
} else {
for (String solution : solutions) {
System.out.println(solution);
}
}
}
public static List<String> solve24(int[] nums) {
List<String> solutions = new ArrayList<>();
dfs(nums, new ArrayList<>(), solutions);
return solutions;
}
private static void dfs(int[] nums, List<Double> expr, List<String> solutions) {
if (nums.length == 0) {
if (Math.abs(expr.get(0) - TARGET) < EPSILON) {
solutions.add(expr.get(1).intValue() + "=" + TARGET);
}
return;
}
for (int i = 0; i < nums.length; i++) {
int[] remaining = new int[nums.length - 1];
for (int j = 0, k = 0; j < nums.length; j++) {
if (j != i) {
remaining[k++] = nums[j];
}
}
expr.add((double) nums[i]);
dfs(remaining, expr, solutions);
expr.remove(expr.size() - 1);
expr.add(-nums[i]);
dfs(remaining, expr, solutions);
expr.remove(expr.size() - 1);
expr.add(nums[i]);
dfs(remaining, expr, solutions);
expr.remove(expr.size() - 1);
if (nums[i] != 0) {
expr.add((double) nums[i]);
dfs(remaining, expr, solutions);
expr.remove(expr.size() - 1);
}
}
}
}
```
此算法使用深度优先搜索(DFS)来遍历所有可能的表达式。对于每个数字,可以选择加、减、乘、除四种运算符,递归地进行搜索,并将满足条件的表达式存储在结果列表中。最终输出所有的解。
注意:此算法假设输入的四个数字均为整数,且能够得到结果为24的表达式。如果无解或输入不合法,会输出相应的提示信息。