华为OD机试 - 火星文计算2(JS)| 真题+思路++考点+代码
火星文计算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
解题思路
这是一个字符串解析的算法任务,它对输入的字符串进行了处理,然后输出最终结果。
- 首先,该代码使用readline函数读入一个字符串,该字符串可能包含#和$符号,表示分隔符。
- 然后,使用split函数将读入的字符串按#符号分隔为一个字符串数组。
- 接下来,遍历字符串数组,对于包含$符号的字符串,再使用split函数将其分隔为数字字符串数组。
- 然后,使用reduce函数对该数字字符串数组进行计算,结果存储在数组的相应位置。
- 如果字符串数组仅包含一个元素,则直接输出该元素的值。否则,使用reduce函数将数组的所有元素进行计算,并输出结果。
核心知识点
-
使用正则表达式将输入字符串分为两个列表:数字列表和操作符列表。
-
使用
while
循环实现对 “#” 操作符的计算。 -
调用
sharp
和dollar
函数对数字进行运算,并得到最终结果。 -
将最终结果通过
print
语句输出。
Code
/*** Author: 华为OD联盟(梦想橡皮擦,码莎拉蒂,鸿蒙坚果)* Date: 2023/2/16* Time: 9:35* Description:*/
let a=readline()// let a='7$6$5#12'let res=a.split('#')for(let i=0;i<res.length;i++){if(res[i].includes('$')){let t=res[i].split('$')res[i]=t.reduce((a,b)=>3*Number(a)+Number(b)+2)}}if(res.length==1){console.log(res[0])}else{res=res.reduce((a,b)=>(2*a+3*b+4))}console.log(res)
版权说明
试题来源:华为 OD 联盟整理收集
题解:解题思路 与 代码 为原创内容,该部分版权由 OD 联盟共同拥有,并授权组内成员发布。
目标:👉 助你解开所有机试题