草庐IT

华为OD机试经验(A 卷 2022Q4)

fly2022. 2023-08-11 原文

文章目录


先打个小广告:在我的Hr的指导帮助下,顺利通过了机试,两轮技术面,由于今年顺利研究生上岸,所以没有进行主管面试了,向各位想去华为OD的小伙伴们推荐我的对接Hr微信(蒋虎):jiang18214871995,各位有什么问题可以加微信咨询,也可以留言评论

第一二题很简单,理清楚逻辑就没问题,第三题我通过了80%,最后20%的问题是堆栈爆了,求大佬指教指教(总分360)

1、汇率

1CNY = 100fen
1JPY=100sen
1HKD=100cents
1EUR=100eurocents
1GBP=100pence
汇率表格如下

CNYJPYHKDEURGBP
10018251231412

输入:一个整数n,接着n行为各个国家的钱

3
1CNY
123HKD123cents

输出:所有钱换算为fen的总和
解释:1CNY=100fen,123HKD=100CNY=10000fen,123cents=1.23HKD=1CNY=100fen

10200

思路

分解字符串,分成数字和名字,然后通过一个函数换算成fen,最后累加就得到结果

代码

#include<bits/stdc++.h>
#include<iostream>
using namespace std;

double get_fen(double x, string s) {             //换算为fen
	if (s == "CNY") return x * 100;
	if (s == "fen") return x;
	if (s == "JPY") return x * 10000 / 1825;
	if (s == "sen") return x * 100 / 1825;
	if (s == "HKD") return x * 10000 / 123;
	if (s == "cents") return x * 100 / 123;
	if (s == "EUR") return x * 10000 / 14;
	if (s == "eurocents") return x * 100 / 14;
	if (s == "GBP") return x * 10000 / 12;
	if (s == "pence") return x * 100 / 12;
	return 0;
}

int main() {
	int n;
	string s;
	double res = 0;
	cin >> n;
	while (n--) {
		cin >> s;
		int i = 0;
		while (i < s.length()) {
			double money = 0;
			string money_name = "";
			while (s[i] >= '0' && s[i] <= '9') {                  //得到数字
				money = money * 10 + s[i] - '0';
				i++;
			}
			while ((s[i] < '0' || s[i]>'9') && i < s.length()) {   //得到money名字
				money_name += s[i];
				i++;
			}
			res += get_fen(money, money_name);                     //换算成fen再累加
		}
	}
	cout << (int)res;
	return 0;

}

2、箱子之字形摆放


思路:

1、判断需要输出的字符串长度,比较箱子数量和空地宽度,取较小的即为输出字符串个数,定义字符串数组
2、遍历字符串,将遍历到的字符添加到字符串数组对于的字符串,最后输出所有字符串即可
字符串数组的每个字符串的字符对应原字符串的下标如下(字符串个数为d):

第一个字符第二个字符第三个字符第四个字符
02d-12d4d-1
d-1d3d-13d

奇数列:下标 i 的字符对应的为第 i%(2d) 个字符串(从第0个字符串开始)
偶数列:下标 i 的字符对应的尾第 2d-1-i%(2d) 个字符串

#include<bits/stdc++.h>
#include<iostream>
using namespace std;

int main() {
	string s;
	int d;
	cin >> s >> d;
	vector<string> vs;
	if (s.length() > d) vs = vector<string>(d, "");  //判断出要输出字符串的长度,定义字符串数组
	else vs = vector<string>(s.length(), "");
	for (int i = 0; i < s.length(); i++) {						//根据对应法则将遍历到字符添加到字符串数组
		if (i % (2 * d) <= d - 1) vs[i % (2 * d)] += s[i];     	//位于奇数列的字符串
		else vs[2 * d - 1 - i % (2 * d)] += s[i];				//位于偶数列的字符串
	}
	for (auto x : vs) cout << x << endl;
	return 0;

}

3、Excel单元格数值统计


思路

将需要计算的表格加入队列
通过字符串分析,进行分支,一步一步进行计算
(可惜只通过了80%)

代码

#include<bits/stdc++.h>
using namespace std;

int get_1(string s) {               //将字符串转化为数字
	int value = 0;
	for (int i = 0; i < s.length(); i++) {
		value = value * 10 + s[i] - '0';
	}
	return value;
}

int main() {
	int row, col;
	long long res = 0;
	string query;
	queue<vector<int>> q;
	cin >> row >> col;
	vector<vector<string>> excel(100, vector<string>(100));
	vector<vector<int>> value(100, vector<int>(100));      //存转化为数字的excel
	vector<vector<int>> val(100, vector<int>(100));        //标记是否转化为数字
	for (int i = 0; i < row; i++) {                        //输入excel 
		for (int j = 0; j < col; j++) {
			cin >> excel[i][j];
			if (excel[i][j][0] != '=') {
				value[i][j] = get_1(excel[i][j]);
				val[i][j] = 1;
			}
			else q.push({ i,j });							//入队为转化为数字的坐标
		}
	}
	while (!q.empty()) {                       				//计算队列中所有需要计算的表格
		vector<int> ax = q.front();
		q.pop();
		string s = excel[ax[0]][ax[1]];
		string s1 = "";
		string s2 = "";
		int index = 0;
		for (int i = 1; i < s.length(); i++) {              //分割运算符和单元格和数字
			if (s[i] != '+' && s[i] != '-') s1 += s[i];
			else {
				index = i;
				for (int j = i + 1; j < s.length(); j++) s2 += s[j];
				break;
			}
		}
		if (index == 0) {                               //等于某个单元格的值
			if (val[get_1(string(s1, 1, s1.length() - 1)) - 1][s1[0] - 'A']) {
				value[ax[0]][ax[1]] = value[get_1(string(s1, 1, s1.length() - 1)) - 1][s1[0] - 'A'];
				val[ax[0]][ax[1]] = 1;
			}
			else q.push(ax);
		}
		else {											//双目运算
			if ((s1[0]>='0'&&s1[0]<='9') || (s2[0] >= '0' && s2[0] <= '9')) {        //单元格和数字双目运算
				int aa, bb;
				if (s1[0] == '=') {
					if (val[get_1(string(s1, 1, s1.length() - 1)) - 1][s1[0] - 'A']) {
						aa = value[get_1(string(s1, 1, s1.length() - 1)) - 1][s1[0] - 'A'];
						bb = get_1(s2);
						if (s[index] == '+') value[ax[0]][ax[1]] = aa + bb;
						else value[ax[0]][ax[1]] = aa - bb;
						val[ax[0]][ax[1]] = 1;
					}
					else q.push(ax);
				}
				else {
					if (val[get_1(string(s2, 1, s2.length() - 1)) - 1][s2[0] - 'A']) {
						aa = get_1(s1);
						bb = value[get_1(string(s2, 1, s2.length() - 1)) - 1][s2[0] - 'A'];
						if (s[index] == '+') value[ax[0]][ax[1]] = aa + bb;
						else value[ax[0]][ax[1]] = aa - bb;
						val[ax[0]][ax[1]] = 1;
					}
					else q.push(ax);
				}
			}
			else if (val[get_1(string(s1, 1, s1.length() - 1)) - 1][s1[0] - 'A'] && val[get_1(string(s2, 1, s2.length() - 1)) - 1][s2[0] - 'A']) { //单元格与单元格的双目运算
				if (s[index] == '+') {
					value[ax[0]][ax[1]] = value[get_1(string(s1, 1, s1.length() - 1)) - 1][s1[0] - 'A'] + value[get_1(string(s2, 1, s2.length() - 1)) - 1][s2[0] - 'A'];
					val[ax[0]][ax[1]] = 1;
				}
				else {
					value[ax[0]][ax[1]] = value[get_1(string(s1, 1, s1.length() - 1)) - 1][s1[0] - 'A'] - value[get_1(string(s2, 1, s2.length() - 1)) - 1][s2[0] - 'A'];
					val[ax[0]][ax[1]] = 1;
				}
			}
			else q.push(ax);
		}
	}
	cin >> query;
	string s1 = "";
	string s2 = "";
	for (int i = 0; i < query.length(); i++) {
		if (query[i] != ':') s1 += query[i];
		else {
			for (int j = i + 1; j < query.length(); j++) s2 += query[j];
			break;
		}
	}
	for (int i = get_1(string(s1, 1, s1.length() - 1)) - 1; i < get_1(string(s2, 1, s2.length() - 1)); i++) {
		for (int j = s1[0] - 'A'; j <= s2[0] - 'A'; j++) res += value[i][j];
	}
	cout << res << endl;
	return 0;

}

有关华为OD机试经验(A 卷 2022Q4)的更多相关文章

  1. 华为OD机试用Python实现 -【明明的随机数】 2023Q1A - 2

    华为OD机试题本篇题目:明明的随机数题目输入描述输出描述:示例1输入输出说明代码编写思路最近更新的博客华为od2023|什么是华为od,od薪资待遇,od机试题清单华为OD机试真题大全,用Python解华为机试题|机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为o

  2. 华为常用命令 - 2

    system-view进入系统视图quit退到系统视图sysname交换机命名vlan20创建vlan(进入vlan20)displayvlan显示vlanundovlan20删除vlan20displayvlan20显示vlan里的端口20Interfacee1/0/24进入端口24portlink-typeaccessvlan20把当前端口放入vlan20undoporte1/0/10删除当前VLAN端口10displaycurrent-configuration显示当前配置02配置交换机支持TELNETinterfacevlan1进入VLAN1ipaddress192.168.3.100

  3. 映宇宙2022年营收63亿元:同比下降三成,毛利率提升4.3个百分点 - 2

    3月26日,映宇宙(HK:03700,即“映客”)发布截至2022年12月31日的2022年度业绩财务报告。财报显示,映宇宙2022年的总营收为63.19亿元,较2021年同期的91.76亿元下降31.1%。2022年,映宇宙的经营亏损为4698.7万元,2021年同期则为净利润4.57亿元;期内亏损(净亏损)为1.68亿元,2021年同期的净利润为4.33亿元;非国际财务报告准则经调整净利润为3.88亿元,2021年同期为4.82亿元,同比下降19.6%。 映宇宙在财报中表示,收入减少主要是由于行业竞争加剧,该集团对旗下产品采取更为谨慎的运营策略以应对市场变化。不过,映宇宙的毛利率则有所提升

  4. 华为OD机试真题 C++ 实现【带传送阵的矩阵游离】【2023 Q2 | 200分】 - 2

            所有题目均有五种语言实现。C实现目录、C++实现目录、Python实现目录、Java实现目录、JavaScript实现目录题目n行m列的矩阵,每个位置上有一个元素你可以上下左右行走,代价是前后两个位置元素值差的绝对值.另外,你最多可以使用一次传送阵(只能从一个数跳到另外一个相同的数)求从走上角走到右下角最少需要多少时间。输入描述:第一行两个整数n,m,分别代表矩阵的行和列。后面n行,每行m个整数,分别代表矩阵中的元素。输出描述:一个整数,表示最少需要多少时间。

  5. 西安华为OD面试体验 - 2

    西安华为OD面试体验开始投简历技术面试进展工作进展开始投简历去年一整年一直在考研和工作之间纠结,感觉自己的状态好像当时的疫情一样差劲。之前刚毕业的时候投了个大厂的简历,结果一面写算法的时候太拉跨了,虽然知道时dfs但是代码熟练度不够,放在平时给足时间自己可以调试通过,但是熟练度不够那面试当时就写不出来被刷了。说真的算法学到后期我感觉最重要的是熟练度和背板子(对于我这种普通玩家来说),面试题如果一上来短时间内想不出思路就完蛋了。然后由于当时找的工作不是很理想就又想考研了。但是考研是有风险的,我自我感觉自己可能冲不上那个学校,而找工作一个没成可以继续找嘛。本着抱着试试看的态度在boss上投了简历,

  6. 华为ensp详细安装包、安装教程及所遇问题 - 2

    目录一、安装包链接二、安装详细步骤1.安装Wireshark和WinPcap2.安装OracleVMVirtualBox3.安装ensp三、安装后注册四、启动路由器出现40错误怎么解决一、安装包链接二、安装详细步骤链接:https://pan.baidu.com/s/1QbUUYMOMIV2oeIKHWP1SpA?pwd=xftx提取码:xftx1.安装Wireshark和WinPcap找到Wireshark安装包所在文件夹,双击它,按照以下步骤安装。2.安装OracleVMVirtualBox找到OracleVMVirtualBox安装包所在文件夹,双击它,按照以下步骤安装。注:可自定义安装

  7. 中润光学在科创板IPO过会:拟募资4亿元,张平华为实际控制人 - 2

    近日,上海证券交易所科创板披露的信息显示,嘉兴中润光学科技股份有限公司(下称“中润光学”)获得上市委会议通过。这意味着,中润光学的上市之路获得实质性进展,接下来将提交注册。据贝多财经了解,中润光学的招股书于2022年5月20日获得科创板受理,5个月后便获得上市委会议通过,进度不可谓不快。本次冲刺科创板上市,中润光学拟募资4.05亿元,计划用于高端光学镜头智能制造项目、高端光学镜头研发中心升级项目等。天眼查信息显示,中润光学成立于2012年8月,是一家以从事非金属矿物制品业为主的企业。当前,该公司的注册资本为6600万元,法定代表人为张平华。穿透股权可知,张平华也是该公司的实际控制人。据招股书介

  8. 阿里云,华为云,腾讯云三大公有云厂商,香港地区主机测评 - 2

    三大公有云厂商,香港地区主机测评一、ping时延比对(厦门电信本地测试):Ping时延测试腾讯云阿里云华为云延迟率最低时延44ms,最高72ms,平均46ms47.242段:最低时延59ms,最高204ms,平均107ms最低时延45ms,最高93ms,平均47ms丢包率丢包率小有的ip段丢包率较大每个段都会有概率丢包阿里云:47.242段:最低时延59ms,最高204ms,平均107ms,有的ip段丢包率较大8.210段:最低时延64ms,最高232ms,平均119ms,丢包率较好腾讯云:最低时延44ms,最高72ms,平均46ms,丢包率小华为云:最低时延45ms,最高93ms,平均47m

  9. IDEA 2022 创建 Spring Boot 项目详解 - 2

    如何用IDEA2022创建并初始化一个SpringBoot项目?目录如何用IDEA2022创建并初始化一个SpringBoot项目?0. 环境说明1.  创建SpringBoot项目 2.编写初始化代码0. 环境说明IDEA2022.3.1JDK1.8SpringBoot1.  创建SpringBoot项目        打开IDEA,选择NewProject创建项目。        填写项目名称、项目构建方式、jdk版本,按需要修改项目文件路径等信息。        选择springboot版本以及需要的包,此处只选择了springweb。        此处需特别注意,若你使用的是jdk1

  10. 华为认证的网络工程师证好考吗,含金量高吗 ? - 2

    华为认证分等级的,相当于初中高三个等级,当然高级是比较难考的,也是含金量最高的。我就慢慢给你介绍一下。1.了解华为认证华为认证网络工程师是由华为公司认证与采购部推出的独立认证体系,与之前的华为认证不同,简称HCIA。同时华为认证是华为技术有限公司凭借多年信息通信技术人才培养经验,以及对行业发展的理解,以层次化的职业技术认证为指引,推出的覆盖IP、IT、CT以及ICT融合技术领域的认证体系,是ICT全技术领域认证体系。​2.怎么考取华为认证网络工程师?要考取华为认证网络工程师必须选择最近的Prometric授权考试中心APTC报名并参加GB0-190的考试,考试通过后,以获得由华为统一签发的“华

随机推荐