dabocaiqq 2023-07-22 21:41 采纳率: 52.1%
浏览 18
已结题

Java语言怎么实现扑克牌4张用加减乘除,程序自动产生算式计算的实现的过程是什么

Java语言怎么实现扑克牌4张用加减乘除,使得得到的算式的结果是24,程序自动产生算式计算的实现的过程是什么

  • 写回答

3条回答 默认 最新

  • 全栈若城 新星创作者: 编程技术技术领域 2023-07-23 21:07
    关注

    使用递归方式生成所有可能的表达式,并计算其结果
    代码如下

    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();
        }
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 8月2日
  • 已采纳回答 7月25日
  • 创建了问题 7月22日