华为机试 - 火星计算器

题解 | # 华为OD - 火星文计算 # 本人与2023年8月机考400通过,会持续更新本专栏。本专栏会包含JavaScript和Java两种实现方式,会以很简洁的代码去实现。相对于其他人的专栏,本专栏代码是浅显易懂的,可以在看懂代码的基础上去按自己的思路编写代码,通过率以及分数都会倍增。 阅读详情
火星计算器:
   火星人使用运算符:@ # $ &
   优先级为:@ > # > $ > &
   
   X@Y = (X+1)*(Y+2)
   X#Y = (2X+3)*(3Y+4)
   X$Y = (3X+11)*(2Y+7)
   X&Y = (5X+20)*(4Y+1)
   
   X#Y@Z = X#(Y@Z)
   
   编写火星计算器程序,计算火星文表达式;
   
   例子:
   输入:1@2

   输出:8 

#include <iostream>
#include <string>
#include <stack>
using namespace std;

int changeOp(char op)
{
	switch (op)
	{
	case '&':return 1;
	case '$':return 2;
	case '#':return 3;
	case '@':return 4;
	}
	return 0;
}

int cal(int num1, int num2, int op)
{
	switch(op)
	{
	case 1:return (5*num1+20)*(4*num2+1);
	case 2:return (3*num1+11)*(2*num2+7);
	case 3:return (2*num1+3)*(3*num2+4);
	case 4:return (num1+1)*(num2+2);
	}
	return 0;
}

int main()
{
	string str;
	cin>>str;
	stack<int> numStack;
	stack<int> opStack;
	int num=0;
	char op;
	for (unsigned i=0;i<str.size();i++)
	{
		if (str[i]>='0'&&str[i]<='9')
			num=num*10+str[i]-'0';
		else
		{
			op=str[i];
			numStack.push(num);
			num=0;
			if (numStack.size()==1)
			{
				opStack.push(changeOp(op));
				continue;
			}
			int curOp=changeOp(op);
			int prevOp=opStack.top();
			if(prevOp>=curOp)
			{
				int num1=numStack.top();
				numStack.pop();
				int num2=numStack.top();
				numStack.pop();
				numStack.push(cal(num1,num2,prevOp));
				opStack.pop();
				opStack.push(curOp);
			}
			else
			{
				opStack.push(curOp);
			}
		}
	}
	numStack.push(num);
	while (!opStack.empty())
	{
		int num1=numStack.top();
		numStack.pop();
		int num2=numStack.top();
		numStack.pop();
		numStack.push(cal(num2,num1,opStack.top()));
		opStack.pop();
	}
	cout<<numStack.top()<<endl;
	system("pause");
	return 0;
}


火星文计算 输入的字符串说明: 字符串为仅由无符号整数和操作符(#、$)组成的计算表达式。例如:123#4$5#67$78。4、保证输入的字符串为合法的求值报文,例如:123#4$5#67$78。3、火星人公式中,#的优先级高于$,相同的运算符,按从左到右的顺序计算。1、用例保证字符串中,操作数与操作符之间没有任何分隔符。现有一段火星人的字符串报文,请你来翻译并计算结果。3+4-5*6/7 //有其它操作符。#4$5 //缺少操作数。4$5# //缺少操作数。4#$5 //缺少操作数。4 $5 //有空格。 阅读详情

相关推荐

华为od统一考试B卷【火星文计算】C++ 实现

已知火星人使用的运算符为#、$,其与地球人的等价公式如下:x#y = 2*x+3*y+4x$y = 3*x+y+21、其中x、y是无符号整数2、地球人公式按C语言规则计算3、火星人公式中,$的优先级高于#,相同的运算符,按从左到右的顺序计算。现有一段火星人的字符串报文,请你来翻译并计算结果。

MISAYAONE的博客 1356

HUAWEI 机试题:火星文计算

???? Scala 实现 题目描述: 已知火星人使用的运算符为#、$,其与地球人的等价公式如下: x#y = 2x+3y+4 x$y = 3*x+y+2 其中x、y是无符号整数 地球人公式按C语言规则计算 火星人公式中,$的优先级高于#,相同的运算符,按从左到右的顺序计算 现有一段火星人的字符串报文,请你来翻译并计算结果。 输入描述: 火星人字符串表达式(结尾不带回车换行) **输入的字符串说明: ** 字符串为仅由无符号整数和操作符(#、$) 组成的计算表达式。例如:1

weixin_47243236的博客 6701

华为OD机试题,用 Java 解【火星文计算】问题 | 含解题说明

本篇题目:火星文计算 题目 已经火星人使用的运算符号为# $ 其与地球人的等价公式如下 x#y=2*x+3*y+4 x$y=3*x+y+2 x y是无符号整数 地球人公式按照 c 语言规则进行计算 火星人公式中$符优先级高于#相同的运算符按从左到右的顺序运算

梦想橡皮擦,专栏100例写作模式先行者,现象级专栏 《Python 爬虫 100 例》作者、《滚雪球学 Python 专栏》原创者 1万+

AcWing 420. 火星人

AcWing 420. 火星人 y总讲得很好,学到很多所以安利一下 转载自Acwing yxc 算法 (贪心,全排列) O(nm)O(nm) 这道题目可以直接用next_permutation函数来做。 这里我们考虑一下next_permutation函数的原理,然后手动实现一遍。 对于给定的某个排列,我们想求出比它大的最小的排列。 可以从后往前遍历这个排列,找到第一个可以让排列的字典序变大的位置。 只有当序列单调下降时,它才不存在更大的排列,因此我们要找的位置就是第一次出现 ak−1<akak−1&

qq_34832548的博客 424

【华为OD机试真题】20、火星文计算 | 机试真题+思路参考+代码解析(C语言、C++、Java、Py、JS)

已知火星人使用的运算符为#、$,其与地球人的等价公式如下: x#y = 2*x+3*y+4 x$y = 3*x+y+2 1、其中x、y是无符号整数 2、地球人公式按C语言规则计算 3、火星人公式中,$的优先级高于#,相同的运算符,按从左到右的顺序计算 现有一段火星人的字符串报文,请你来翻译并计算结果。

KJ.JK 7527

【华为OD机试真题 C语言】20、火星文计算 | 机试真题+思路参考+代码解析

已知火星人使用的运算符为#、$,其与地球人的等价公式如下: x#y = 2*x+3*y+4 x$y = 3*x+y+2 1、其中x、y是无符号整数 2、地球人公式按C语言规则计算 3、火星人公式中,$的优先级高于#,相同的运算符,按从左到右的顺序计算 现有一段火星人的字符串报文,请你来翻译并计算结果。

KJ.JK 1262

20140815 华为机试 记录

华为是我投的第一份简历,今天第一次机试,有一些感想,想找个地方记录一下,跟大家分享。这也是我写的第一篇博客,新的开始,希望一切顺利。 注意事项: 1.华为的机试环境C和C++是VS2005,一直使用VC6.0的同学最好提前熟悉下环境。建工程时最好建空项目,不要带预编译头的。建完空项目自己在项目下添加.cpp源文件。 2.华为的提交跟leetcode不一样,leetcode给你提供接口,你只需

dancy_bin的专栏 613

华为od机试真题:火星符号运算(Python)

华为od机试真题:火星符号运算(Python) 已知火星人使用的运算符号为 `#`和`$` 其与地球人的等价公式如下 ``` x#y=2*x+3*y+4 x$y=3*x+y+2 ``` 1. x y是无符号整数。 2. 地球人公式按照c语言规则进行计算。 3. 火星人公式中,# 号的优先级高于 $ ,相同的运算符,按从左往右的顺序计算 现有一段火星人的字符串报文,请你来翻译并计算结果

学习,你不是一个人在战斗 ~ 961302305(QQ,微信) 1463

华为机试题:火星计算器 java版本

火星计算器 自定义运算符 @,#,$,&,并且优先级@>#>$>&,利用下面的计算法则,计算出一个给定的字符串表示的表达式的值,返回整型结果。 x@y = (x-1)*(y+1); x#y = (2*x+5)*(3*y+60) x$y = (x+1)*(2*x+3)*(y-1)*(2*y-3) x&y = ((x+y+1)*(y-9)+(x+7)/(y-8)) 输入:接受多行输入,每行可能有空格。

maotinggang的博客 1804

【华为OD机考真题】- 火星文计算(B卷-100分)(JS版)

🔔本文收录于「最新最全华为OD机试真题(JavaScript版)」专栏,手把手带你零基础教学华为OD机试。本题集提供最优题解思路,解题步骤,代码解析,复杂度分析及最优题解源码等,支持多语言题解,助你轻松拿捏OD机考,一举上岸!安利大家关注&&收藏&&订阅!题库正在疯狂收录中,up!up!up!! 🚫提醒:拒绝一切代考/替考,违法必究!专栏所写题库均精心搜集于互联网,经过精心筛选和整理,结合数位十多年大厂实战经验资深大佬经验所撰,欢迎订阅。    💗订阅福利:一次订阅,可永久免费阅读,提供在线答疑解惑,

**My Coding Family** 1355

【2023华为od-C卷-第二题-火星文计算】100%通过率(JavaScript&Java&Python&C++)

即可添加博主vx:utheyi,获取答疑/辅导服务。

m0_73659489的博客 2095

2025年浙江大学计算机考研复试机试真题

2025年浙江大学计算机考研复试机试真题

u014339447的博客 1146

【Py/Java/C++三种语言OD2023C卷真题】20天拿下华为OD笔试之【栈】2023C-火星文计算2【欧弟算法】全网注释最详细分类最全的华为OD真题题解

可上全网独家的练习华子OD、大厂真题绿色聊天软件戳od1336了解算法冲刺训练。

weixin_48157259的博客 834

2015华为实习生-机试题-火星计算器

先直接贴上题目,大家感受一下:自定义运算符 @,#,$,&,并且优先级@>#>$>&,利用下面的计算法则,计算出一个给定的字符串表示的表达式的值,返回整型结果。x@y = (x-1)*(y+1); x#y = (2*x+5)*(3*y+60) x$y = (x+1)*(2*x+3)*(y-1)*(2*y-3) x&y = ((x+y+1)*(y-9)+(x+7)/(y-8))输入:接受多行输入,每行

旅行de攻城狮 2074

直线型一阶倒立摆1---从理论到实践的桥梁

本文深入探讨了直线型一阶倒立摆在控制理论中的核心地位,从非线性控制、鲁棒性到实时反馈等关键问题。通过实际案例和硬件搭建指南,帮助读者理解从理论到实践的过渡,特别适合控制工程初学者和研究人员。文章还提供了算法选型建议和硬件避坑手册,是掌握倒立摆控制的实用指南。

weixin_29047545的博客 317

ROS 2 Slam Toolbox实战:从零跑通2D激光建图

SLAM(同步定位与地图构建)是移动机器人实现自主导航的基础技术,其核心在于通过传感器数据实时估计位姿并构建环境栅格地图。slam_toolbox作为ROS 2 Humble及后续LTS版本官方主推的2D SLAM后端,采用图优化+闭环检测架构,兼顾实时性、鲁棒性与工程可维护性。相比cartographer和hector_slam,它原生支持ROS 2、参数精简、诊断友好,特别适合硬件资源有限、缺乏IMU或深度相机的差速机器人平台。本文聚焦真实部署场景,覆盖RPLIDAR等常见2D激光雷达与TurtleBo

weixin_30596165的博客 356

【2024华为OD-E卷-100分-火星文计算】(题目+思路+Java&C++&Python解析)

给定一个火星文字符串,每个火星文字符代表一个0到9之间的数字。我们需要实现一个火星文计算器,支持加法、减法、乘法和除法四种基本运算。火星文字符和数字的对应关系是预先给定的,通过一个映射表提供。

xiaohuoche的博客 700

手把手教你用yt-dlp批量下载YouTube视频数据集(附TikTok/Kaggle资源)

本文提供了一份构建视频数据集的实战指南,重点介绍了使用yt-dlp工具批量下载YouTube视频的高级技巧,包括环境配置、批量参数设置与自动化脚本。同时,文章还整合了TikTok、Kaggle及学术开源数据集等多源高质量视频资源,并分享了数据清洗、格式统一与管理的完整流程,帮助研究者和开发者高效获取与处理训练数据。

weixin_29057237的博客 289
上一篇: 华为机试 - 一串正整数相加
下一篇: Leetcode - Array - Merge Sorted Array
JerkWisdom
博客等级 码龄14年 70粉丝 76原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值