代码编织梦想


第一二题很简单,理清楚逻辑就没问题,第三题我通过了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;

}
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_43339544/article/details/129626907

【华为od机试真题 python】路灯照明问题 【2022 q4 | 100分】_无痕de泪的博客-爱代码爱编程

■ 题目描述 在一条笔直的公路上安装了N个路灯,从位置0开始安装,路灯之间间距固定为100米。 每个路灯都有自己的照明半径,请计算第一个路灯和最后一个路灯之间,无法照明的区间的长度和。 输入描述 第一行为一个数N,表示路灯个数,1<=N<=100000 第二行为N个空格分隔的数,表示路径的照明半径,1<=照明半径<=10000

【华为od机试真题 python】 数大雁【2022 q4 | 100分】_无痕de泪的博客-爱代码爱编程

前言 《华为OD笔试真题 python》 专栏含华为OD机试真题、华为面试题、牛客网华为专栏真题。 如果您正在准备华为的面试,或者华为od的机会,有任何想了解的可以私信我进行交流。我会尽可能的给一些建议,和帮您解答! PS:文中答案仅供参考,不能照抄哦 ■ 题目描述 【数大雁】 一群大雁往南飞,给定一个字符串记录地面上的游客听到的大雁叫声,请

【华为od机试真题 python】 we are a team【2022 q4 | 100分】_无痕de泪的博客-爱代码爱编程

■ 题目描述 【We Are A Team】 总共有 n 个人在机房,每个人有一个标号(1<=标号<=n),他们分成了多个团队,需要你根据收到的 m 条消息判定指定的两个人是否在一个团队中,具体的: 1、消息构成为 a b c,整数 a、b 分别代表两个人的标号,整数 c 代表指令 2、c == 0 代表 a 和 b 在一个团队内 3

【华为od机试真题 java】水仙花数 【2022 q4 | 100分】_消失de岁月的博客-爱代码爱编程

前言 《华为OD笔试真题 JAVA》 专栏含华为OD机试真题JAVA实现、华为面试题、牛客网华为专栏真题。 如果您正在准备华为的面试,或者华为od的机会,希望可以帮到您! PS:文中答案仅供参考,不可照抄 ■ 题目描述 【水仙花数】 所谓水仙花数,是指一个n位的正整数,其各位数字的n次方和等于该数本身。 例如153是水仙花数,153是一个3位数

【华为od机试真题 java】最远足迹【2022 q4 | 100分】-爱代码爱编程

■ 题目描述 【最远足迹】 某探险队负责对地下洞穴进行探险。探险队成员在进行探险任务时,随身携带的记录器会不定期地记录自身的坐标,但在记录的间隙中也会记录其他数据。探索工作结束后,探险队需要获取到某成员在探险过程中相对于探险队总部的最远的足迹位置。 仪器记录坐标时,坐标的数据格式为(x,y),如(1,2)、(100,200),其中0<x<

【华为od机试真题 java】 组成最大数【2022 q4 | 100分】-爱代码爱编程

前言 《华为OD笔试真题 JAVA》 专栏含华为OD机试真题JAVA实现、华为面试题、牛客网华为专栏真题。 如果您正在准备华为的面试,或者华为od的机会,希望可以帮到您! PS:文中答案仅供参考,不可照抄 题目描述 【组成最大数】 小组中每位都有一张卡片,卡片上是6位内的正整数,将卡片连起来可以组成多种数字,计算组成的最大数字。 输入描述 “

【华为od机试真题 java】 数列描述【2022 q4 | 100分】-爱代码爱编程

前言 《华为OD笔试真题 JAVA》 专栏含华为OD机试真题JAVA实现、华为面试题、牛客网华为专栏真题。 如果您正在准备华为的面试,或者华为od的机会,希望可以帮到您! PS:文中答案仅供参考,不可照抄 ​ ■ 题目描述 【数列描述】 有一个数列a[N] (N=60),从a[0]开始,每一项都是一个数字。数列中a[n+1]都是a[n]的描述。

【华为od机试c++实现】开心消消乐【2022 q4考试题 a卷 |100分】-爱代码爱编程

■ 题目描述 【开心消消乐】 给定一个N行M列的二维矩阵,矩阵中每个位置的数字取值为0或1。矩阵示例如: 1100 0001 0011 1111 现需要将矩阵中所有的1进行反转为0,规则如下: 1) 当点击一个1时,该1便被反转为0,同时相邻的上、下、左、右, 以及左上、左下、右上、右下8 个方向的1(如果存在1)均会自动反转为0;

【华为od机试 c++】采样过滤【 2022 q4考试题 a卷 |200分】-爱代码爱编程

时间限制:C/C++ 1秒,其他语言 2秒 空间限制:C/C++262144K,其他语言524288K 64bit IO Format:%lld 本题可使用本地IDE编码,不能使用本地已有代码,无跳出限制, 编码后请点击”保存并调试“按钮进行代码提交。 ■ 题目描述 【采样过滤】 在做物理实验时,为了计算物体移动的速率,通过相机等工具周期

【华为od机试真题 python】整理扑克牌 (a卷2022q4)-爱代码爱编程

前言:本专栏将持续更新华为OD机试题目,并进行详细的分析与解答,包含完整的代码实现,希望可以帮助到正在努力的你。关于OD机试流程、面经、面试指导等,如有任何疑问,欢迎联系我,wechat:steven_moda;email:

【华为od机试真题 python】 查找树中元素 (a卷2022q4)-爱代码爱编程

前言:本专栏将持续更新华为OD机试题目,并进行详细的分析与解答,包含完整的代码实现,希望可以帮助到正在努力的你。关于OD机试流程、面经、面试指导等,如有任何疑问,欢迎联系我,wechat:steven_moda;email:

【华为od机试真题 python】找车位 【2022 q4 | 100分】_找车位 od-爱代码爱编程

前言 《华为OD笔试真题 python》 专栏含华为OD机试真题、华为面试题、牛客网华为专栏真题。 如果您正在准备华为的面试,或者华为od的机会,有任何想了解的可以私信我进行交流。我会尽可能的给一些建议,和帮您解答 ■ 题目描述 【找车位】 停车场有一横排车位,0代表没有停车,1代表有车。至少停了一辆车在车位上,也至少有一个空位没有停车。 为了

【华为od机试真题 python】真正的密码【2022 q4 | 100分】_真正的密码python代码-爱代码爱编程

■ 题目描述 【真正的密码】 题目描述 在一行中输入一个字符串数组,如果其中一个字符串的所有以索引0开头的子串在数组中都有,那么这个字符串就是潜在密码, 在所有潜在密码中最长的是真正的密码,如果有多个长度相同的真正的密码,那么取字典序最大的为唯一的真正的密码,求唯一的真正的密码。 示例1    输入输出示例仅供调试,后台判断数据一般不包含示例

【100%通过率 】华为od机试真题 c++ 【机器人活动区域】【2022 q4 |200分】_华为od 2022q4 c++-爱代码爱编程

华为OD机试- 题目列表 2023Q1 点这里!! 2023华为OD机试-刷题指南 点这里!! 题目描述 现有一个机器人,可放置于 M × N 的网格中任意位置, 每个网格包含一个非负整数编号, 当相邻网格的数字编号差值的绝对值小于等于 1 时, 机器人可以在网格间移动。 问题: 求机器人可活动的最大范围对应的网格点数目。

【华为od机试真题 java】找出通过车辆最多颜色 (a卷2022q4)-爱代码爱编程

前言:本专栏将持续更新华为OD机试题目,并进行详细的分析与解答,包含完整的代码实现,希望可以帮助到正在努力的你。关于OD机试流程、面经、面试指导等,如有任何疑问,欢迎联系我,wechat:steven_moda;email:

【华为od机试真题 java】上班之路 (a卷2022q4)_od统一考试(a卷2022q4)-爱代码爱编程

前言:本专栏将持续更新华为OD机试题目,并进行详细的分析与解答,包含完整的代码实现,希望可以帮助到正在努力的你。关于OD机试流程、面经、面试指导等,如有任何疑问,欢迎联系我,wechat:steven_moda;email: