华为OD机试经验(A 卷 2022Q4)
创始人
2025-05-29 22:50:06
0

文章目录

  • 1、汇率
  • 2、箱子之字形摆放
  • 3、Excel单元格数值统计

第一二题很简单,理清楚逻辑就没问题,第三题我通过了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
#include
using namespace std;double get_fen(double x, string s) {             //换算为fenif (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
#include
using namespace std;int main() {string s;int d;cin >> s >> d;vector vs;if (s.length() > d) vs = vector(d, "");  //判断出要输出字符串的长度,定义字符串数组else vs = vector(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
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> q;cin >> row >> col;vector> excel(100, vector(100));vector> value(100, vector(100));      //存转化为数字的excelvector> val(100, vector(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 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;}

相关内容

热门资讯

linux入门---制作进度条 了解缓冲区 我们首先来看看下面的操作: 我们首先创建了一个文件并在这个文件里面添加了...
C++ 机房预约系统(六):学... 8、 学生模块 8.1 学生子菜单、登录和注销 实现步骤: 在Student.cpp的...
JAVA多线程知识整理 Java多线程基础 线程的创建和启动 继承Thread类来创建并启动 自定义Thread类的子类&#...
【洛谷 P1090】[NOIP... [NOIP2004 提高组] 合并果子 / [USACO06NOV] Fence Repair G ...
国民技术LPUART介绍 低功耗通用异步接收器(LPUART) 简介 低功耗通用异步收发器...
城乡供水一体化平台-助力乡村振... 城乡供水一体化管理系统建设方案 城乡供水一体化管理系统是运用云计算、大数据等信息化手段࿰...
程序的循环结构和random库...   第三个参数就是步长     引入文件时记得指明字符格式,否则读入不了 ...
中国版ChatGPT在哪些方面... 目录 一、中国巨大的市场需求 二、中国企业加速创新 三、中国的人工智能发展 四、企业愿景的推进 五、...
报名开启 | 共赴一场 Flu... 2023 年 1 月 25 日,Flutter Forward 大会在肯尼亚首都内罗毕...
汇编00-MASM 和 Vis... Qt源码解析 索引 汇编逆向--- MASM 和 Visual Studio入门 前提知识ÿ...
【简陋Web应用3】实现人脸比... 文章目录🍉 前情提要🌷 效果演示🥝 实现过程1. u...
前缀和与对数器与二分法 1. 前缀和 假设有一个数组,我们想大量频繁的去访问L到R这个区间的和,...
windows安装JDK步骤 一、 下载JDK安装包 下载地址:https://www.oracle.com/jav...
分治法实现合并排序(归并排序)... 🎊【数据结构与算法】专题正在持续更新中,各种数据结构的创建原理与运用✨...
在linux上安装配置node... 目录前言1,关于nodejs2,配置环境变量3,总结 前言...
Linux学习之端口、网络协议... 端口:设备与外界通讯交流的出口 网络协议:   网络协议是指计算机通信网...
Linux内核进程管理并发同步... 并发同步并发 是指在某一时间段内能够处理多个任务的能力,而 并行 是指同一时间能够处理...
opencv学习-HOG LO... 目录1. HOG(Histogram of Oriented Gradients,方向梯度直方图)1...
EEG微状态的功能意义 导读大脑的瞬时全局功能状态反映在其电场结构上。聚类分析方法一致地提取了四种头表面脑电场结构ÿ...
【Unity 手写PBR】Bu... 写在前面 前期积累: GAMES101作业7提高-实现微表面模型你需要了解的知识 【技...