华为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();


    }
}
相关推荐
松涛和鸣1 小时前
14、C 语言进阶:函数指针、typedef、二级指针、const 指针
c语言·开发语言·算法·排序算法·学习方法
yagamiraito_3 小时前
757. 设置交集大小至少为2 (leetcode每日一题)
算法·leetcode·go
星释3 小时前
Rust 练习册 57:阿特巴什密码与字符映射技术
服务器·算法·rust
无敌最俊朗@3 小时前
力扣hot100-141.环形链表
算法·leetcode·链表
向着光芒的女孩5 小时前
【IDEA】关不了的Proxy Authentication弹框探索过程
java·ide·intellij-idea
Filotimo_5 小时前
Spring Boot 整合 JdbcTemplate(持久层)
java·spring boot·后端
李慕婉学姐6 小时前
【开题答辩过程】以《“饭否”食材搭配指南小程序的设计与实现》为例,不知道这个选题怎么做的,不知道这个选题怎么开题答辩的可以进来看看
java·spring·小程序
WWZZ20256 小时前
快速上手大模型:深度学习10(卷积神经网络2、模型训练实践、批量归一化)
人工智能·深度学习·神经网络·算法·机器人·大模型·具身智能
abments7 小时前
pgsql timestamp without time zone > character varying解决方案
java
sali-tec7 小时前
C# 基于halcon的视觉工作流-章62 点云采样
开发语言·图像处理·人工智能·算法·计算机视觉