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

2023-11-07


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

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

1、汇率

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

CNY JPY HKD EUR GBP
100 1825 123 14 12

输入:一个整数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):

第一个字符 第二个字符 第三个字符 第四个字符
0 2d-1 2d 4d-1
d-1 d 3d-1 3d

奇数列:下标 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;

}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • netty实现websocket发送文本和二进制数据

    最近在学习netty相关的知识 看到netty可以实现 websoket 因此记录一下在netty中实现websocket的步骤 主要实现传递文本消息和传递二进制消息 此处只考虑是图片 如果是别的消息可以考虑使用自定义协议 需求 1 使用

随机推荐

  • centos7最小化安装之后配置网络(ip)

    1 执行命令cd etc sysconfig network scripts 2 找到ifcfg eno16777736类似的文件 3 vi ifcfg eno16777736 4 将ONBOOT no 改为 ONBOOT yes 5 重启
  • 将jar包安装到本地仓库

    首先要安装maven 配置环境变量 百度 so easy 然后打开终端 执行以下命令 注意 红色对用红色 黄色对应黄色 绿色对应绿色 mvn install install file DgroupId cn vicky reddwarf D
  • B站数据分析岗实习生面试记录

    step1 自我介绍一下 还是需要准备以下的 不然一下子介绍自己的话 没话说 而且介绍自己不完全 step2 一道sql的笔试题目 建议刷一下题目呀 一定要刷题 掌握那些最基本的语法 step3 面试题目1 比如对B站近30天的弹幕发送量进
  • Office project 2021安装

    哈喽 大家好 今天一起学习的是project 2021的安装 Microsoft Office project项目管理工具软件 凝集了许多成熟的项目管理现代理论和方法 可以帮助项目管理者实现时间 资源 成本计划 控制 有兴趣的小伙伴也可以来
  • VALSE 文档图像智能报告整理

    目录 引言 端到端检测识别 探索检测和识别的协同作用 减少对标注的依赖 去除一些不必要的组件 文字擦除和编辑 文字辅助场景理解 视频文字擦除和文档矫正 文字识别 自监督预训练 对比学习 更高效的语言模型 手写数学公式识别 文档图像理解 视频
  • java创建数据库连接和对数据库操作的主要步骤

    Java创建数据库连接和对数据库操作的主要五个步骤如下 1 加载数据库驱动 使用 Class forName 方法加载指定的数据库驱动类 例如加载MySQL的驱动类 Class forName com mysql jdbc Driver 2
  • 基于LINUX策略路由的实现

    一 网络结构eth0 10 43 128 10 gw 10 43 0 254 gt interneleth1 61 144 64 106 gw 61 144 64 1 gt interneleth2 192 168 0 2 gw 192 1
  • python判断网络是否通

    提供两种方法 netstats py coding gbk import myarp import os class netStatus def internet on self ip 192 168 150 1 os system arp
  • 软件架构设计(四) 基于服务的架构(SOA)

    前面我们了解到了层次架构中表示层的架构分层 分为了MVC MVP MVVM等架构风格 下面我们了解一下SOA架构与微服务架构 什么是服务 服务是一种为了满足某项业务需求的操作 规则等的逻辑组合 它包含了一系列有序活动的交互 为实现用户目标提
  • Xshell 提示 “找不到匹配的host key算法”

    记录 Xshell 6 使用中遇到的 找不到匹配的host key算法 问题 问题现象 ssh远程服务器直接弹窗提示 找不到匹配的host key算法 检查点 首先查看下 sshd 的配置文件 etc ssh sshd config 确认下
  • 剑指 Offer 53 - I. 在排序数组中查找数字 I

    题目链接 53 I 在排序数组中查找数字 I 思路分析 利用二分查找即可 class Solution public int search vector
  • QT5.15.2在线安装教程(详细图文)

    一 在线安装的原因 QT对5 15以及以上版本已经停止提供离线安装包 但是 5 15以及以上版本都支持在线安装 Qt5 15以下版本可直接在Index of archive qt中下载离线安装包 二 QT账号的注册 1 打开百度 搜索QT
  • 小学科技创新项目的查新报告

    我们也经常看到这些 别人家的孩子 11岁杨荷馨 南京市六合区玉带镇中心小学伸缩式车厢卡车第六届国际发明博览会的银牌 已经申请国家专利 11岁小学生发明节能燃气灶 11岁女 发明家 造智能温控电风扇获金奖 那么现在当你家小朋友也要参加小学科技
  • 四个收敛的关系:一致收敛,点态收敛,绝对收敛,条件收敛

    一致收敛和点态收敛 先看两者定义 一致收敛 任意正数 epsilon 存在 N gt 0 N gt 0 N gt 0 当
  • VUE-CLI测试环境和打包正式环境的配置切换

    config文件夹pro d env js文件 use strict module exports NODE ENV production API ROOT http 120 79 94 143 配置开发端口 config文件夹dev en
  • 化繁为简,使用Hibernate Validator实现参数校验(一)

    目录 前言 环境配置 导入依赖 基础校验 校验注解 参数绑定 PathVariable RequestParam RequestBody Validated Valid 单参校验 对象校验 分组校验 顺序校验 前言 在之前的悦享校园的开发中
  • docker 离线安装

    目录 服务介绍 软件下载 服务配置 二进制安装docker与docker compose 服务管理命令 服务介绍 docker 是一个供开发和运维人员开发 测试 部署和运行应用的容器平台 docker compose 是一个用于运行和管理多
  • 缓存案例-架构真题(二十二)

    试题一 某大型电商平台建立一个B2B商店系统 并在全国建设了仓储中心 但是在运营过程中 发现很多跨仓储中心调货 延误运送 为此建立全国仓储系统 通过对订单的分析和挖掘 并通过大数据分析预测各类配置 降低成本 当用户通过B2B商店下单 会通过
  • Notepad++ - 缓存目录

    C Users 你的用户名 AppData Roaming Notepad backup 被360清理了 或者程序崩溃了 死机了 都可以在这里找到
  • 华为OD机试经验(A 卷 2022Q4)

    文章目录 1 汇率 2 箱子之字形摆放 3 Excel单元格数值统计 先打个小广告 在我的Hr的指导帮助下 顺利通过了机试 两轮技术面 由于今年顺利研究生上岸 所以没有进行主管面试了 向各位想去华为OD的小伙伴们推荐我的对接Hr微信 蒋虎