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


    }
}
相关推荐
CoovallyAIHub10 分钟前
MSD-DETR:面向机车弹簧检测的可变形注意力Detection Transformer
算法·架构
CoovallyAIHub15 分钟前
不改权重、不用训练!BEM用背景记忆抑制固定摄像头误检,YOLO/RT-DETR全系有效
算法·架构·github
Struggle_975519 分钟前
算法知识-从递归入手三维动态规划
算法·动态规划
A-Jie-Y24 分钟前
JAVA框架-SpringBoot环境搭建指南
java·spring boot
yuan1999725 分钟前
使用模糊逻辑算法进行路径规划(MATLAB实现)
开发语言·算法·matlab
不才小强28 分钟前
线性表详解:顺序与链式存储
数据结构·算法
CoovallyAIHub28 分钟前
上交+阿里 | Interactive ASR:Agent框架做语音识别交互纠错,1轮交互语义错误率降57%
算法·架构·github
深兰科技32 分钟前
深兰科技与淡水河谷合作推进:矿区示范加速落地
java·人工智能·python·c#·scala·symfony·深兰科技
Aaron158839 分钟前
8通道测向系统演示科研套件
人工智能·算法·fpga开发·硬件工程·信息与通信·信号处理·基带工程
计算机安禾44 分钟前
【数据结构与算法】第42篇:并查集(Disjoint Set Union)
c语言·数据结构·c++·算法·链表·排序算法·深度优先