@yexiaoqi 2022-05-20T08:38:02.000000Z 字数 1381 阅读 267

# HJ67. 24点游戏算法

刷题

输入：7 2 1 10



public class HJ67_24点游戏算法 {    public static void main(String[] args){        Scanner sc=new Scanner(System.in);        while(sc.hasNext()){            double[] nums=new double[4];            for(int i=0; i<nums.length; i++){                nums[i]=(sc.nextDouble());            }            System.out.println(dfs(nums));        }    }    public static boolean dfs(double[] nums){        if(nums.length==1) {//处理计算精度问题            return Math.abs(nums[0]-24) <= 1e-6;        }        //任意取两个不同的数，运算出第三个数，进行后续计算        for(int i=0; i<nums.length; i++){            for(int j=i+1; j<nums.length; j++){                //存放运算结果及剩余元素                double[] newNums=new double[nums.length-1];                for (int k=0,index=0; k<nums.length; k++){                    if (k!=i && k!=j) {                        newNums[index++]=nums[k];                    }                }                //尝试加法                newNums[newNums.length-1] = nums[i]+nums[j];                if (dfs(newNums)) return true;                //减法                newNums[newNums.length-1] = nums[i]-nums[j];                if (dfs(newNums)) return true;                newNums[newNums.length-1] = nums[j]-nums[i];                if (dfs(newNums)) return true;                //乘法                newNums[newNums.length-1] = nums[i]*nums[j];                if (dfs(newNums)) return true;                //除法，除数不能为0                if (nums[i] != 0){                    newNums[newNums.length-1] = nums[j]/nums[i];                    if (dfs(newNums)) return true;                }                if (nums[j] != 0){                    newNums[newNums.length-1] = nums[i]/nums[j];                    if (dfs(newNums)) return true;                }            }        }        return false;    }}

• 私有
• 公开
• 删除