题解 | #24点游戏算法#

24点游戏算法

https://www.nowcoder.com/practice/fbc417f314f745b1978fc751a54ac8cb

import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    static boolean rslt;
    static int N =4;
    static int[] arr;
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        arr = new int[N];
        while (scan.hasNextInt()) {
            for(int i=0;i<arr.length;i++) {
                arr[i]=scan.nextInt();
            }
            for(int i=0;i<arr.length;i++) {
                f(i,arr[i], 1," "+i+" ");//path格式注意
            }
            System.out.println(rslt);
            rslt=false;// ---复位
        }
    }

    public static void f(int iint sint LString path) {//L记录层数,path记录用过的数字,是积累的值
        if(rslt)return;// ------短路
        if(L==4 && s==24) {
            rslt = true//-----注意每次输出前要重制为false
            return;
        }
        for(int j=0;j<N;j++) {
            if(path.contains(" "+j+" ")) continue;  //跳过已经使用的元素
            String pth = path+j+" ";
            f(j,s+arr[j],L+1,pth);
            //注意减法两个值顺序交换结果不同
            f(j,arr[j]-s,L+1,pth);
            f(j,s-arr[j],L+1,pth);
            
            f(j,s*arr[j],L+1,pth);
            //注意除法两个值顺序交换结果不同,要求整除与判零
            if(s!=0&&arr[j]%s==0)f(j,arr[j]/s,L+1,pth);
            if(arr[j]!=0&&s%arr[j]==0)f(j,s/arr[j],L+1,pth);
            
        }
        
    }
}
全部评论

相关推荐

点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务