当前位置: 首页 > news >正文

货币单位换算 - 华为OD统一考试(E卷)

2024华为OD机试(E卷+D卷)最新题库【超值优惠】Java/Python/C++合集

华为od机试

题目描述

记账本上记录了若干条多国货币金额,需要转换成人民币分(fen),汇总后输出。

每行记录一条金额,金额带有货币单位,格式为数字+单位,可能是单独元,或者单独分,或者元与分的组合。

要求将这些货币全部换算成人民币分(fen)后进行汇总,汇总结果仅保留整数,小数部分舍弃。

元和分的换算关系都是1:100,如下:

  • 1CNY=100fen(1元=100分)
  • 1HKD=100cents(1港元=100港分)
  • 1JPY=100sen(1日元=100仙)
  • 1EUR=100eurocents(1欧元=100欧分)
  • 1GBP=100pence(1英镑=100便士)

汇率如下表

CNYJPYHKDEURGBP
10018251231412

即100CNY=1825JPY=123HKD=14EUR=12GBP

输入描述

第一行输入为N,N表示记录数。0<N<100

之后N行,每行表示一条货币记录,且该行只会是一种货币。

输出描述

将每行货币转换成人民币分(fen)后汇总求和,只保留整数部分,

输出格式只有整数数字,不带小数,不带单位。

示例1

输入:
1
100CNY输出:
10000说明:
100CNY转换后是10000fen,所以输出结果为10000

题解

该题目属于 字符串处理哈希映射 结合的类型问题。核心思想是通过字符串解析和单位转换将不同货币转换为统一的人民币分(fen),然后进行汇总。它可以归为 字符串处理数学计算 类问题。

解题思路

  1. 解析输入:对于每一行输入的货币记录,我们首先需要从字符串中提取出金额和货币单位。货币单位可能是元(CNY、JPY等)或者分(fen、cents等),因此需要精确提取。
  2. 建立汇率表:使用哈希映射 (在不同语言中分别为 mapHashMapdict) 来存储每种货币单位相对于人民币分的换算关系。
  3. 转换为人民币分:根据提取的货币单位,通过汇率表将其转换为人民币分(fen)。
  4. 汇总求和:处理完所有货币记录后,对其进行汇总,只保留整数部分,舍弃小数。
  5. 输出结果:最终结果只需要输出整数形式的总和。

代码大致描述

  1. 初始化汇率表:将所有相关货币的单位转换汇率存入一个哈希映射(例如,"CNY": 100.0"JPY": (100 / 1825.0) * 100)。
  2. 解析字符串:遍历每一行货币记录,提取出货币单位和数值。
  3. 查找汇率并进行转换:利用提取的货币单位从哈希映射中查找对应汇率,并将货币值转换为人民币分。
  4. 结果汇总:将转换后的分值进行累加,输出结果。

时间复杂度

时间复杂度为 O(N),其中 N 是货币记录的条数。因为每一条记录的处理时间为常数时间级别,包括字符串的解析和汇率的查找。

空间复杂度

空间复杂度为 O(1),除去输入数据以外,哈希映射的大小是固定的,汇率表中只有少量固定货币单位。

Java

import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
/*** @author code5bug*/
public class Main {// 使用静态常量定义汇率private static final double JPY_RATE = 1825.0;private static final double HKD_RATE = 123.0;private static final double EUR_RATE = 14.0;private static final double GBP_RATE = 12.0;// 初始化汇率public static void init(Map<String, Double> exchange) {exchange.put("fen", 1.0);exchange.put("CNY", 100.0);exchange.put("JPY", (100.0 / JPY_RATE) * 100);exchange.put("sen", (100.0 / JPY_RATE));exchange.put("HKD", (100.0 / HKD_RATE) * 100);exchange.put("cents", (100.0 / HKD_RATE));exchange.put("EUR", (100.0 / EUR_RATE) * 100);exchange.put("eurocents", (100.0 / EUR_RATE));exchange.put("GBP", (100.0 / GBP_RATE) * 100);exchange.put("pence", (100.0 / GBP_RATE));}// 处理输入的字符串,计算结果public static double processInput(String line, Map<String, Double> exchange) {int len = line.length();double result = 0;int j = 0;while (j < len) {int num = 0;StringBuilder unit = new StringBuilder();// 解析数字部分while (j < len && Character.isDigit(line.charAt(j))) {num = num * 10 + (line.charAt(j) - '0');j++;}// 解析货币单位部分while (j < len && Character.isLetter(line.charAt(j))) {unit.append(line.charAt(j));j++;}// 检查货币单位是否在 map 中if (exchange.containsKey(unit.toString())) {result += num * exchange.get(unit.toString());} else {System.err.println("Error: Unknown currency unit: " + unit);return 0;  // 遇到未知货币单位时可以处理错误}}return result;}public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();scanner.nextLine();  // 读取换行符Map<String, Double> exchange = new HashMap<>();init(exchange);for (int i = 0; i < n; i++) {String line = scanner.nextLine();double result = processInput(line, exchange);System.out.println((int) result);  // 输出时强制转换为整型}scanner.close();}
}

使用 HashMap 代替 unordered_map:在 Java 中,HashMap 提供与 unordered_map 类似的功能,效率也较高。

字符串处理:Java 使用 StringBuilder 来构建字符串,适合在循环中逐个添加字符的场景。

输入处理:使用 Scanner 类处理输入数据,通过 nextLine()nextInt() 来读取输入。

静态常量:Java 中用 static final 来定义常量,并用全大写字母表示常量名。

错误处理:用 System.err.println() 输出错误消息,并在遇到未知货币单位时返回 0

Python

def init_exchange():# 初始化汇率字典exchange = {"fen": 1.0,"CNY": 100.0,"JPY": (100.0 / 1825.0) * 100,"sen": (100.0 / 1825.0),"HKD": (100.0 / 123.0) * 100,"cents": (100.0 / 123.0),"EUR": (100.0 / 14.0) * 100,"eurocents": (100.0 / 14.0),"GBP": (100.0 / 12.0) * 100,"pence": (100.0 / 12.0)}return exchangedef process_input(line, exchange):length = len(line)result = 0i = 0while i < length:num = 0unit = ""# 解析数字部分while i < length and line[i].isdigit():num = num * 10 + int(line[i])i += 1# 解析货币单位部分while i < length and line[i].isalpha():unit += line[i]i += 1# 检查货币单位是否在字典中if unit in exchange:result += num * exchange[unit]else:print(f"Error: Unknown currency unit: {unit}")return 0  # 遇到未知货币单位时可以处理错误return resultdef main():# 输入记录数n = int(input())# 初始化汇率exchange = init_exchange()# 处理每条记录for _ in range(n):line = input()result = process_input(line, exchange)print(int(result))  # 输出时转换为整型if __name__ == "__main__":main()

init_exchange():这个函数初始化一个字典,存储不同货币单位到人民币分的汇率。

process_input():这个函数处理输入的每一行,将数字和货币单位解析出来,并根据字典中的汇率进行计算。最后返回总计的转换结果。如果遇到未识别的货币单位,会输出错误并返回 0。

main():主函数,先从输入中获取要处理的记录数 n,然后读取每条记录并进行处理,最后输出结果。

C++

 #include <cctype>   // for isdigit, isalpha
#include <iostream>
#include <string>
#include <unordered_map>using namespace std;// 使用 constexpr 定义常量以提高效率和可读性
constexpr double JPY_RATE = 1825.0;
constexpr double HKD_RATE = 123.0;
constexpr double EUR_RATE = 14.0;
constexpr double GBP_RATE = 12.0;void init(unordered_map<string, double>& exchange)
{// 存储每种货币相对于 fen 的汇率exchange["fen"]       = 1.0;exchange["CNY"]       = 100.0;exchange["JPY"]       = (100.0 / JPY_RATE) * 100;exchange["sen"]       = (100.0 / JPY_RATE);exchange["HKD"]       = (100.0 / HKD_RATE) * 100;exchange["cents"]     = (100.0 / HKD_RATE);exchange["EUR"]       = (100.0 / EUR_RATE) * 100;exchange["eurocents"] = (100.0 / EUR_RATE);exchange["GBP"]       = (100.0 / GBP_RATE) * 100;exchange["pence"]     = (100.0 / GBP_RATE);
}double process_input(const string& line, const unordered_map<string, double>& exchange)
{int    len    = line.size();double result = 0;for (int j = 0; j < len;) {int    num = 0;string unit;// 解析数字部分while (j < len && isdigit(line[j])) {num = num * 10 + (line[j] - '0');j++;}// 解析货币单位部分while (j < len && isalpha(line[j])) {unit += line[j];j++;}// 检查货币单位是否在 map 中if (exchange.find(unit) != exchange.end()) {result += num * exchange.at(unit);} else {cerr << "Error: Unknown currency unit: " << unit << endl;return 0;   // 遇到未知货币单位时可以处理错误}}return result;
}int main()
{int n;cin >> n;unordered_map<string, double> exchange;init(exchange);for (int i = 0; i < n; ++i) {string line;cin >> line;double result = process_input(line, exchange);cout << static_cast<int>(result) << endl;   // 输出时强制转换为整型}return 0;
}

整理题解不易, 如果有帮助到您,请给点个赞 ‍❤️‍ 和收藏 ⭐,让更多的人看到。🙏🙏🙏

相关文章:

货币单位换算 - 华为OD统一考试(E卷)

2024华为OD机试&#xff08;E卷D卷&#xff09;最新题库【超值优惠】Java/Python/C合集 题目描述 记账本上记录了若干条多国货币金额&#xff0c;需要转换成人民币分(fen)&#xff0c;汇总后输出。 每行记录一条金额&#xff0c;金额带有货币单位&#xff0c;格式为数字单位&…...

95、k8s之rancher可视化

一、ranker 图形化界面 图形化界面进行k8s集群的管理 rancher自带监控----普罗米修斯 [rootmaster01 opt]# docker load -i rancher.tar ##所有节点 [rootmaster01 opt]# docker pull rancher/rancher:v2.5.7 ##主节点[rootmaster01 opt]# vim /etc/docker/daemon.jso…...

简单生活的快乐

小明经常会被问到一个问题&#xff1a;为什么他那么有钱却选择过一种简单、谦逊的生活。先从小明的早年经历说起吧&#xff0c;大概是他六到十三岁的时候&#xff0c;物质对他来说是非常重要的。他记得当妈妈给他买了一双昂贵的鞋子时&#xff0c;他特别兴奋&#xff0c;喜欢向…...

【JAVA开源】基于Vue和SpringBoot的在线文档管理系统

本文项目编号 T 038 &#xff0c;文末自助获取源码 \color{red}{T038&#xff0c;文末自助获取源码} T038&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 查…...

大数据新视界 --大数据大厂之数据驱动决策:如何利用大数据提升企业竞争力

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…...

【Linux】生产者消费者模型:基于阻塞队列,使用互斥锁和条件变量维护互斥与同步关系

目录 一、什么是生产者消费者模型 二、为什么要引入生产者消费者模型&#xff1f; 三、详解生产者消费者模型 ​编辑 生产者和生产者、消费者和消费者、生产者和消费者&#xff0c;它们之间为什么会存在互斥关系&#xff1f; 生产者和消费者之间为什么会存在同步关系&…...

多层感知机paddle

多层感知机——paddle部分 本文部分为paddle框架以及部分理论分析&#xff0c;torch框架对应代码可见多层感知机 import paddle print("paddle version:",paddle.__version__)paddle version: 2.6.1多层感知机&#xff08;MLP&#xff0c;也称为神经网络&#xff0…...

linux-网络管理-网络服务管理 17 / 100

Linux 网络管理&#xff1a;网络服务管理 一、概述 在 Linux 系统中&#xff0c;网络服务管理是系统管理中的重要组成部分。网络服务通常涉及到多种协议、服务和工具&#xff0c;用于确保服务器与客户端、局域网与广域网、以及不同系统之间的通信畅通。Linux 提供了强大的工具…...

Docker上安装mysql

获取 MySQL 镜像 获取镜像。使用以下命令来拉取镜像&#xff1a; 1docker pull mysql:latest 这里拉取的是最新版本的 MySQL 镜像。你也可以指定特定版本&#xff0c;例如&#xff1a; 1docker pull mysql:8.0 运行 MySQL 容器 运行 MySQL 容器时&#xff0c;你需要指定一些…...

【秋招笔试-支持在线评测】8.28华为秋招(已改编)-三语言题解

🍭 大家好这里是 春秋招笔试突围,一起备战大厂笔试 💻 ACM金牌团队🏅️ | 多次AK大厂笔试 | 大厂实习经历 ✨ 本系列打算持续跟新 春秋招笔试题 👏 感谢大家的订阅➕ 和 喜欢💗 和 手里的小花花🌸 ✨ 华为专栏传送🚪 -> 🧷华为春秋招笔试 目前今年秋招的笔…...

基于python上门维修预约服务数据分析系统

目录 技术栈和环境说明解决的思路具体实现截图python语言框架介绍技术路线性能/安全/负载方面可行性分析论证python-flask核心代码部分展示python-django核心代码部分展示操作可行性详细视频演示源码获取 技术栈和环境说明 结合用户的使用需求&#xff0c;本系统采用运用较为广…...

React基础教程(10):React Hooks

9.1 使用hooks理由 高阶组件为了复用,导致代码层级复杂。生命周期的复杂。写成函数组件,无状态组件,因为需要状态,又写成了class,成本高9.2 useState(保存组件状态) const [state, setState] = useState(initialState);案例:点击按钮修改name...

JVM 调优篇9 调优案例6- cpu使用过载解决办法【超赞】

一 cpu过载说明 1.1 背景说明 如果线程死锁,那么线程一直在占用CPU,这样就会导致CPU一直处于一个比较高的占用率。 1.2 代码 模拟一个死锁的代码 public class JstackDeadLockDemo {/*** 必须有两个可以被加锁的对象才能产生死锁,只有一个不会产生死锁问题*/private f…...

Spring8-事务

目录 JdbcTemplate 声明式事务 事务 概述 特性&#xff08;ACID&#xff09; 编程式事务 声明式事务 基于注解的声明式事务 Transactional注解标识的位置 事务属性&#xff1a;只读 事务属性&#xff1a;超时 事务属性&#xff1a;隔离级别 事务属性&#xff1a;传…...

在Python中,类是用于定义对象的蓝图或模板,而对象则是根据类创建的具体实例

当然&#xff0c;我可以为您演示类与对象的基本概念和它们之间的关系。在Python中&#xff0c;类是用于定义对象的蓝图或模板&#xff0c;而对象则是根据类创建的具体实例。 下面是一个简单的Python程序&#xff0c;它定义了一个Car类&#xff0c;该类具有一些属性和方法&…...

【小波去噪】【matlab】基于小波分析的一维信号滤波(对照组:中值滤波、均值滤波、高斯滤波)

链接1-傅里叶变换 链接2-傅立叶分析和小波分析间的关系 链接3-小波变换&#xff08;wavelet transform&#xff09;的通俗解释 链接4-小波基的选择 1.示例代码 function main_wavelet clc clear close all warning off %% 1.信号生成 time_length 10;%总时长&#xff0c;秒 …...

CentOS 7官方源停服,配置本机光盘yum源

1、挂载系统光盘 mkdir /mnt/iso mount -o loop /tools/CentOS-7-x86_64-DVD-1810.iso /mnt/iso cd /mnt/iso/Packages/ rpm -ivh /mnt/iso/Packages/yum-utils-1.1.31-50.el7.noarch.rpm(图形界面安装&#xff0c;默契已安装&#xff09; 如安装yum-utils依赖错误&#x…...

2024年汉字小达人区级自由报名备考冲刺:2024官方模拟题练一练(续)

2024年第十一届汉字小达人的区级活动的时间9月25-30日正式开赛&#xff0c;满打满算还有9天时间。 今天继续回答一些问题关于汉字小达人的常见问题&#xff0c;再做几道2024年官方模拟题&#xff0c;帮助大家直观地了解汉字小达人的比赛题型和那你程度。 本专题在比赛前持续更…...

实战Redis与MySQL双写一致性的缓存模式

​Redis和MySQL都是常用的数据存储系统&#xff0c;它们各自有自己的优缺点。在实际应用中&#xff0c;我们可能需要将它们结合起来使用&#xff0c;比如将Redis作为缓存&#xff0c;MySQL作为持久化存储。 在这种情况下&#xff0c;我们需要保证Redis和MySQL的数据一致性&…...

KVM环境下制作ubuntu qcow2格式镜像

如果是Ubuntu KVM环境是VMware虚拟机&#xff0c;需要CPU开启虚拟化 1、配置镜像源 wget -O /etc/apt/sources.list https://www.qingtongqing.cc/ubuntu/sources.list2、安装kvm qemu-img libvirt kvm虚拟化所需环境组件 apt -y install qemu-kvm virt-manager libvirt-da…...

无法与IP建立连接,未能下载VSCode服务器

如题&#xff0c;在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈&#xff0c;发现是VSCode版本自动更新惹的祸&#xff01;&#xff01;&#xff01; 在VSCode的帮助->关于这里发现前几天VSCode自动更新了&#xff0c;我的版本号变成了1.100.3 才导致了远程连接出…...

什么是库存周转?如何用进销存系统提高库存周转率?

你可能听说过这样一句话&#xff1a; “利润不是赚出来的&#xff0c;是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业&#xff0c;很多企业看着销售不错&#xff0c;账上却没钱、利润也不见了&#xff0c;一翻库存才发现&#xff1a; 一堆卖不动的旧货…...

现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?

现有的 Redis 分布式锁库&#xff08;如 Redisson&#xff09;相比于开发者自己基于 Redis 命令&#xff08;如 SETNX, EXPIRE, DEL&#xff09;手动实现分布式锁&#xff0c;提供了巨大的便利性和健壮性。主要体现在以下几个方面&#xff1a; 原子性保证 (Atomicity)&#xff…...

uniapp 开发ios, xcode 提交app store connect 和 testflight内测

uniapp 中配置 配置manifest 文档&#xff1a;manifest.json 应用配置 | uni-app官网 hbuilderx中本地打包 下载IOS最新SDK 开发环境 | uni小程序SDK hbulderx 版本号&#xff1a;4.66 对应的sdk版本 4.66 两者必须一致 本地打包的资源导入到SDK 导入资源 | uni小程序SDK …...

vue3 daterange正则踩坑

<el-form-item label"空置时间" prop"vacantTime"> <el-date-picker v-model"form.vacantTime" type"daterange" start-placeholder"开始日期" end-placeholder"结束日期" clearable :editable"fal…...

在 Visual Studio Code 中使用驭码 CodeRider 提升开发效率:以冒泡排序为例

目录 前言1 插件安装与配置1.1 安装驭码 CodeRider1.2 初始配置建议 2 示例代码&#xff1a;冒泡排序3 驭码 CodeRider 功能详解3.1 功能概览3.2 代码解释功能3.3 自动注释生成3.4 逻辑修改功能3.5 单元测试自动生成3.6 代码优化建议 4 驭码的实际应用建议5 常见问题与解决建议…...

篇章二 论坛系统——系统设计

目录 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 1. 数据库设计 1.1 数据库名: forum db 1.2 表的设计 1.3 编写SQL 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 通过需求分析获得概念类并结合业务实现过程中的技术需要&#x…...

跨平台商品数据接口的标准化与规范化发展路径:淘宝京东拼多多的最新实践

在电商行业蓬勃发展的当下&#xff0c;多平台运营已成为众多商家的必然选择。然而&#xff0c;不同电商平台在商品数据接口方面存在差异&#xff0c;导致商家在跨平台运营时面临诸多挑战&#xff0c;如数据对接困难、运营效率低下、用户体验不一致等。跨平台商品数据接口的标准…...

ZYNQ学习记录FPGA(二)Verilog语言

一、Verilog简介 1.1 HDL&#xff08;Hardware Description language&#xff09; 在解释HDL之前&#xff0c;先来了解一下数字系统设计的流程&#xff1a;逻辑设计 -> 电路实现 -> 系统验证。 逻辑设计又称前端&#xff0c;在这个过程中就需要用到HDL&#xff0c;正文…...

Java高级 |【实验八】springboot 使用Websocket

隶属文章&#xff1a;Java高级 | &#xff08;二十二&#xff09;Java常用类库-CSDN博客 系列文章&#xff1a;Java高级 | 【实验一】Springboot安装及测试 |最新-CSDN博客 Java高级 | 【实验二】Springboot 控制器类相关注解知识-CSDN博客 Java高级 | 【实验三】Springboot 静…...