打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
华为OD机试 - 火星文计算 2(Python)| 真题+思路+代码

火星文计算 2

题目

已知火星人使用的运算符号为 #$

其与地球人的等价公式如下
x#y=4*x+3*y+2

x$y=2*x+y+3

  • x y 是无符号整数

  • 地球人公式按照 C 语言规则进行计算

  • 火星人公式中 # 符优先级高于 $

  • 相同的运算符按从左到右的顺序运算

输入

火星人字符串表达式结尾不带回车换行

输入的字符串说明

字符串为仅有无符号整数和操作符组成的计算表达式

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

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

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

  4. 保证输入的字符串为合法的求值报文
    例如: 123#4$5#76$78

  5. 保证不会出现非法的求值报文
    例如:

#4$5 这种缺少操作数
4$5# 这种缺少操作数
4#$5 这种缺少操作数
4 $5 有空格
3+4-5*6/7 有其他操作符
12345678987654321$54321 32 位整数溢出

输出

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

示例一

输入

7#6$5#12

输出

157

说明

7#6$5#12=(4*7+3*6+2)$5#12
        =48$5#12
        =48$(4*5+3*12+2)
        =48$58
        =2*48+58+3
        =157

解题思路

这是一个字符串解析的算法任务,我们可以先使用 re.findall() 方法将输入字符串分为两个列表,一个是操作符(包含了 “#” 和 “$” ),一个是数字。

然后,通过在操作符列表中查找 “#”,它实现了一个循环,在每次循环中通过调用 sharp() 函数计算两个数字的结果,并将其保存在数字列表的合适位置,然后删除对应的操作符和数字。当没有 "#" 操作符时,循环终止。

最后,通过再次遍历数字列表,它调用 dollar() 函数计算最终的结果并输出。

核心知识点

  1. 使用正则表达式将输入字符串分为两个列表:数字列表和操作符列表。

  2. 使用 while 循环实现对 “#” 操作符的计算。

  3. 调用 sharpdollar 函数对数字进行运算,并得到最终结果。

  4. 将最终结果通过 print 语句输出。

Python 代码实现

import re

def solve_method(input):
    operators = re.findall(r'\W+', input)
    nums = list(map(int, re.findall(r'\d+', input)))
    pos_s = operators.index("#")
    while pos_s != -1:
        tmp = sharp(nums[pos_s], nums[pos_s + 1])
        nums[pos_s] = tmp
        nums.pop(pos_s + 1)
        operators.pop(pos_s)
        pos_s = operators.index("#") if "#" in operators else -1
    res = nums[0]
    for i in range(1, len(nums)):
        res = dollar(res, nums[i])
    print(res)

def sharp(x, y):
    return 4 * x + 3 * y + 2

def dollar(x, y):
    return 2 * x + y + 3

input_str = input()
solve_method(input_str)

代码运行结果

7#6$5#12
157

版权说明

试题来源:华为 OD 联盟整理收集

题解:解题思路代码 为原创内容,该部分版权由 OD 联盟共同拥有,并授权组内成员发布。

目标:👉 助你解开所有机试题

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
Ruby语言学习手记
88. 合并两个有序数组
JVM内存模型总结,有各版本JDK对比、有元空间OOM监控案例、有Java版虚拟机,综合学习更容易!
华为OD机试真题Java实现【水仙花数2】真题+解题思路+代码(2022&2023)
Java开发高质量代码建议1:三元操作符的类型务必一致
第一部分 基础语言之二标准库类型
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服