火星文计算 2
题目
已知火星人使用的运算符号为 #
、 $
其与地球人的等价公式如下
x#y=4*x+3*y+2
x$y=2*x+y+3
-
x
y
是无符号整数
-
地球人公式按照 C 语言规则进行计算
-
火星人公式中 #
符优先级高于 $
-
相同的运算符按从左到右的顺序运算
输入
火星人字符串表达式结尾不带回车换行
输入的字符串说明:
字符串为仅有无符号整数和操作符组成的计算表达式
-
用例保证字符串中操作数与操作符之间没有任何分隔符
-
用例保证操作数取值范围为 32 位无符号整数
-
保证输入以及计算结果不会出现整型溢出
-
保证输入的字符串为合法的求值报文
例如: 123#4$5#76$78
-
保证不会出现非法的求值报文
例如:
#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()
函数计算最终的结果并输出。
核心知识点
-
使用正则表达式将输入字符串分为两个列表:数字列表和操作符列表。
-
使用 while
循环实现对 “#” 操作符的计算。
-
调用 sharp
和 dollar
函数对数字进行运算,并得到最终结果。
-
将最终结果通过 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 联盟共同拥有,并授权组内成员发布。
目标:👉 助你解开所有机试题