题解 | #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);
            
        }
        
    }
}
全部评论

相关推荐

ohs的小木屋:比不少实习待遇高了
点赞 评论 收藏
分享
小浪_Coding:找硬件测试,也可兼顾软测欧, 简历还可以的 ,注意排版,项目写的有条理一点, 然后个人技能多加点, 润色好简历之后就开始沟通海投了,深圳,东莞这边做硬件相关的公司还不少, 医疗类,仪器类的都可以尝试
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务