二十四点(ccf 201903-2)

news/2024/6/17 11:36:15 标签: java, 开发语言, 算法

该题考察表达式计算,可以用Stack实现

具体代码

java">import java.util.*;

public class Main7 {

    public static Map<Character,Integer> map = new HashMap<>();

    public static boolean isOp(char c){
        if(c=='+' || c=='-' ||c=='x' ||c=='/'){
            return true;
        }
        else{
            return false;
        }
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int num = sc.nextInt();
        sc.nextLine();
        List<String> exprLst = new ArrayList<>();
        for(int i = 0; i < num; i++){
            String expr = sc.nextLine();
            exprLst.add(expr);
        }


        map.put('+',1);
        map.put('-',1);
        map.put('x',2);
        map.put('/',2);

//        String expr = "1x1+9-9";
        for(String expr : exprLst){
            StringBuilder sb = new StringBuilder();
            Stack<Character> stack = new Stack<>();
            Stack<String> compStack = new Stack<>();

            char[] arr = expr.toCharArray();
            for(char c : arr){
                if(!isOp(c)){
                    sb.append(c);
                }
                else
                {
                    if(stack.isEmpty()){
                        stack.push(c);
                    }
                    else{
                        if(map.get(c) > map.get(stack.peek())){
                            stack.push(c);
                        }
                        else{
                            while (!stack.isEmpty() && map.get(c) <= map.get(stack.peek())){
                                char op = stack.pop();
                                sb.append(op);
                            }
                            stack.push(c);
                        }
                    }

                }
            }

            while (!stack.isEmpty()){
                sb.append(stack.pop());
            }
//            System.out.println(sb);

            char[] postArr = sb.toString().toCharArray();
            for(char c : postArr){
                if(!isOp(c)){
                    compStack.push(String.valueOf(c));
                }
                else{
                    int b = Integer.parseInt(compStack.pop());
                    int a = Integer.parseInt(compStack.pop());
                    switch (c){
                        case '+':
                            compStack.push(String.valueOf(a+b));
                            break;
                        case '-':
                            compStack.push(String.valueOf(a-b));
                            break;
                        case 'x':
                            compStack.push(String.valueOf(a*b));
                            break;
                        case '/':
                            compStack.push(String.valueOf(a/b));
                            break;
                        default:
                            break;
                    }
                }
            }
//            System.out.println(compStack.pop());
            if(Integer.parseInt(compStack.pop()) == 24){
                System.out.println("Yes");
            }
            else{
                System.out.println("No");
            }
        }

    }
}


http://www.niftyadmin.cn/n/5422885.html

相关文章

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之Stack容器组件

鸿蒙&#xff08;HarmonyOS&#xff09;项目方舟框架&#xff08;ArkUI&#xff09;之Stack容器组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、Stack容器组件 堆叠容器&#xff0c;子组件按照顺序依次入栈&#xff0c;后一…

Cisco IOS 使用 IP SLA 状态作为静态路由的开关

Cisco IOS 和 IOS XE 作为最普及的路由器和交换机操作系统&#xff0c;内建强大的状态跟踪联动能力。 我们配置网络设备时&#xff0c;希望设备能主动发现网络故障&#xff0c;及时作出相应调整&#xff0c;并将故障状态传递给网络的其他部分&#xff0c;减少故障恢复时的人工…

为了跳槽或提升自己,你会先学习哪一门编程语言?

通过多个调查表的分析&#xff0c;发现大家对于GO语言的兴趣和需求非常高。GO语言是一种由Google开发的静态类型、编译型语言&#xff0c;最初于2007年问世。这门语言的设计者是Robert Griesemer、Rob Pike和Ken Thompson&#xff0c;他们的初衷是为了弥补C和Java在大规模软件工…

力扣每日练习3.10

3. 无重复字符的最长子串 给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的 最长子串的长度。 示例 1: 输入: s “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”&#xff0c;所以其长度为 3。 解题思路&#xff1a; 1.不含重复字符&#xff0c;可以…

Cassandra 安装部署

文章目录 一、概述1.官方文档2. 克隆服务器3.安装准备3.1.安装 JDK 113.2.安装 Python3.3.下载文件 二、安装部署1.配置 Cassandra2.启动 Cassandra3.关闭Cassandra4.查看状态5.客户端连接服务器6.服务运行脚本 开源中间件 # Cassandrahttps://iothub.org.cn/docs/middleware/…

torch.cuda.is_available()=False

问题&#xff1a; 显示torch.cuda.is_available()False 解决办法&#xff1a;说明这个虚拟环境不可用&#xff0c;删除虚拟环境&#xff0c;重建一个新的虚拟环境 1、删除原来的虚拟环境&#xff0c;假如原虚拟环境为pytorch-old&#xff0c;输入以下命令&#xff0c;先退出当…

第一次Python小练习题目

1.打印某学校的校训&#xff0c;具体内容如下所示&#xff1a; ****************************** 勤奋 严谨 求实 创新 ****************************** 注意: 第一行和最后一行各有 30 个*号。 答案&#xff1a; school_strs "勤奋 严谨 求实 创新&q…

SpringBoot项目中同时支持https和http协议

实用干货&#xff01;看壹哥如何在SpringBoot项目中同时支持https和http协议_springboot http htpps共存-CSDN博客