华为od(D卷)火星文计算

文章目录

题目描述

已知火星人使用的运算符为#、$,其与地球人的等价公式如下:

x#y = 2x+3y+4

x$y = 3*x+y+2

1 其中 x、y 是无符号整数

2.地球人公式按 C 语言规则计算

3.火星人公式中,$的优先级高于#,相同的运算符,按从左到右的顺序计算。现有一段火星人的字符串报文,请你来翻译并计算结果

输入描述

火星人字符串表达式(结尾不带回车换行)输入的字符串说明: 字符串为仅由无符号整数和操作符 (#、)组成的计算表达式例如: 123#4S5#6778

1.用例保证字符串中,操作数与操作符之间没有任何分隔符

2.用例保证操作数取值范围为 32 位无符号整数

3.保证输入以及计算结果不会出现整型溢出

4.保证输入的字符串为合法的求值报文,例如: 123#45#6778

5.保证不会出现非法的求值报文,例如类似这样字符串:

#4$5 //缺少操作数

4$5# //缺少操作数

4#$5 //缺少操作数

4 $5 //有空格

3+4-5*6/7 //有其它操作符

12345678987654321$54321 //32 位整数计算溢出

输出描述

根据输入的火星人字符串输出 Q 计算结果 (结尾不带回车换行)

示例1

输入

7#6$5#12
输出

226
说明

7#6$5#12=7#(36+5+2)#12
=7#25#12
=(2
7+325+4)#12
=93#12
=2
93+3*12+4

=226

思路

正则匹配

代码

java 复制代码
public class Demo17 {

    public static void main(String[] args) {

        Scanner in = new Scanner(System.in);
        while (in.hasNextLine()) {
            // 火星文
            String line = in.nextLine();

            // 先计算 $操作
            Pattern compile = Pattern.compile("(\\d+)\\$(\\d+)");
            Matcher matcher = compile.matcher(line);
            while (matcher.find()) {
                String subString = matcher.group(0);
                Integer x = Integer.valueOf(matcher.group(1));
                Integer y = Integer.valueOf(matcher.group(2));
                line = line.replace(subString, String.valueOf(3 * x + y + 2));
                matcher = compile.matcher(line);
            }
            if (!line.contains("#")) {
                System.out.println(line);
            } else {
                // 在计算 #操作
                List<Integer> collect = Arrays.stream(line.split("#")).map(Integer::valueOf).collect(Collectors.toList());
                int a = collect.get(0);
                for (int i = 1; i < collect.size(); i++) {
                    int b = collect.get(i);
                    a = 2 * a + 3 * b + 4;
                }
                System.out.println(a);

            }


        }
        in.close();


    }
}
相关推荐
星谷罗殇29 分钟前
(七)TRPO 算法 & PPO 算法
算法·机器学习
Fu1co35 分钟前
【Spring Boot】Spring Boot解决循环依赖
java·spring boot·spring
我命由我123452 小时前
Derby - Derby 服务器(Derby 概述、Derby 服务器下载与启动、Derby 连接数据库与创建数据表、Derby 数据库操作)
java·运维·服务器·数据库·后端·java-ee·后端框架
技术砖家--Felix2 小时前
Spring Boot入门篇:快速搭建你的第一个Spring Boot应用
java·开发语言·音视频
国服第二切图仔2 小时前
Rust开发之使用Trait对象实现多态
开发语言·算法·rust
i源2 小时前
Java语言处理Js文件内容格式化
java·javascript
电鱼智能的电小鱼2 小时前
基于电鱼 ARM 工控机的井下AI故障诊断方案——让煤矿远程监控更智能、更精准
网络·arm开发·人工智能·算法·边缘计算
s砚山s3 小时前
代码随想录刷题——二叉树篇(一)
c++·算法·leetcode
为什么要做囚徒3 小时前
IntelliJ IDEA 远程断点调试完全指南
java·ide·intellij-idea