Java语言怎么实现扑克牌4张用加减乘除,使得得到的算式的结果是24,程序自动产生算式计算的实现的过程是什么
3条回答 默认 最新
关注使用递归方式生成所有可能的表达式,并计算其结果
代码如下import java.util.ArrayList; import java.util.List; public class Poker24Game { private static final double TARGET = 24.0; private static final double EPSILON = 1e-6; public static void main(String[] args) { int[] nums = {1, 2, 3, 4}; // 扑克牌的数字值 List<String> expressions = findExpressions(nums); for (String expression : expressions) { System.out.println(expression + " = " + TARGET); } } public static List<String> findExpressions(int[] nums) { List<String> expressions = new ArrayList<>(); helper(nums, new double[nums.length], 0, expressions); return expressions; } private static void helper(int[] nums, double[] results, int count, List<String> expressions) { if (count == nums.length) { if (Math.abs(results[0] - TARGET) < EPSILON) { String expression = buildExpression(results, nums); expressions.add(expression); } return; } for (int i = 0; i < nums.length; i++) { if (nums[i] == Integer.MAX_VALUE) { continue; } int num = nums[i]; nums[i] = Integer.MAX_VALUE; results[count] = num; helper(nums, results, count + 1, expressions); results[count] = -num; helper(nums, results, count + 1, expressions); results[count] = num; for (int j = i + 1; j < nums.length; j++) { if (nums[j] == Integer.MAX_VALUE) { continue; } int nextNum = nums[j]; nums[j] = Integer.MAX_VALUE; results[count] = num + nextNum; helper(nums, results, count + 1, expressions); results[count] = num - nextNum; helper(nums, results, count + 1, expressions); results[count] = num * nextNum; helper(nums, results, count + 1, expressions); if (nextNum != 0) { results[count] = num / nextNum; helper(nums, results, count + 1, expressions); } if (num != 0) { results[count] = nextNum / num; helper(nums, results, count + 1, expressions); } nums[j] = nextNum; } nums[i] = num; } } private static String buildExpression(double[] results, int[] nums) { StringBuilder sb = new StringBuilder(); for (int i = 0; i < results.length; i++) { if (i > 0) { if (results[i] >= 0) { sb.append(" + "); } else { sb.append(" - "); } } sb.append(Math.abs(results[i])); } for (int num : nums) { sb.append(" = ").append(num); } return sb.toString(); } }本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报