题解 | #24点游戏算法#

24点游戏算法

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

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int[] nums=new int[4];
        if (in.hasNext()) { 
            String[] str = in.nextLine().split(" ");
            for(int i=0;i<4;i++)nums[i]=Integer.parseInt(str[i]);
        }
	  //先确定四个数字的顺序
        for(int a=0;a<4;a++){
            int used=(1<<a);
            for(int b=0;b<4;b++){
                if(((used>>b) & 1)==1)continue;
                used= (used|(1<<b));
                for(int c=0;c<4;c++){
                    if(((used>>c) & 1)==1)continue;
                    used= (used|(1<<c));
                    for(int d=0;d<4;d++){
                        if(((used>>d) & 1)==1)continue;
                        if(func(nums[a],nums[b],nums[c],nums[d])){
                            System.out.println("true");
                            return;
                        }
                    }
                }
            }
        }
        System.out.println("false");
    }
    public static boolean func(int aa,int bb,int cc,int dd){
        char[] all={'+','-','*','/'};
        double a=aa,b=bb,c=cc,d=dd;
	  	//计算,有以下4中计算方式
        // ab cd ; ab c d ; a bc d ; a b cd ;
        for(char ch1:all){
            double x1=calu(a,b,ch1);
            double z1=calu(b,c,ch1);
            double u1=calu(c,d,ch1);
            for(char ch2:all){
                double x2=calu(c,d,ch2);
                double y2=calu(x1,c,ch2);
                double z2=calu(a,z1,ch2);
                double u2=calu(b,u1,ch2);
                for(char ch3:all){
                    double x3=calu(x1,x2,ch3);
                    if(x3==24)return true;
                    double y3=calu(y2,d,ch3);
                    if(y3==24)return true;
                    double z3=calu(z2,d,ch3);
                    if(z3==24)return true;
                    double u3=calu(a,u2,ch3);
                    if(u3==24)return true;
                }
            }
        }
        return false;
    }
    public static double calu(double a,double b,char ch){
        double res=0;
        switch(ch){
            case '+':
                res=a+b;
                break;
            case '-':
                res=a-b;
                break;
            case '*':
                res=a*b;
                break;
            case '/':
                if(b==0)res=10001;
                else res=a/b;
        }
        return res;
    }
}

理论上各种情况都考虑到了

全部评论

相关推荐

zYvv:双一流加大加粗再标红,然后广投。主要是获奖荣誉不够,建议开始不用追求大厂,去别的厂子刷下实习。
点赞 评论 收藏
分享
07-25 11:26
清华大学 Java
打开电脑,思绪又回到了7月份刚开始的时候,感觉这个月过的如梦如幻,发生了太多事,也算是丰富了我本就是平淡的人生吧太早独立的我习惯了一切都是自己做决定,拥有绝对的决定权,而且永远不会听取别人的建议。我就是那个恋爱四年出轨的男主啦,感觉既然在牛客开了这个头,那我就要做个有始有终的人。从我出轨到结束再到和女朋友和好如初真的太像一场梦了,短短的一个月我经历了太多,也成长了很多,放下了那些本就不属于我的,找回了那些我不该放弃的。我的人生丰富且多彩,但人不能一直顺,上天总会让你的生活中出点乱子,有好有坏,让你学会一些东西,让你有成长。我和女朋友的恋爱四年太过于平淡,日常除了会制造一些小浪漫之外,我们的生活...
段哥亡命职场:不得不说,我是理解你的,你能发出来足见你是个坦诚的人,至少敢于直面自己的内心和过往的过错。 这个世界没有想象中那样非黑即白,无论是农村还是城市,在看不见的阴影里,多的是这样的事。 更多的人选择站在制高点去谩骂,一方面是社会的道德是需要制高点的,另一方面,很多人不经他人苦,却劝他人善。 大部分的我们,连自己生命的意义尚且不能明晰,道德、法律、困境,众多因果交织,人会迷失在其中,只有真的走出来之后才能看明白,可是没走出来的时候呢?谁又能保证自己能走的好,走的对呢? 可是这种问题有些人是遇不到的,不去追寻,不去探寻,也就没了这些烦恼,我总说人生的意义在过程里,没了目标也就没了过程。 限于篇幅,没法完全言明,总之,这世界是个巨大的草台班子,没什么过不去了,勇敢面对,革故鼎新才是正确,祝你早日走出来。查看图片
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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