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

华为OD机试真题—— 货币单位换算(2025B卷:100分)Java/python/JavaScript/C/C++/GO最佳实现

在这里插入图片描述

2025 B卷 100分 题型

本专栏内全部题目均提供Java、python、JavaScript、C、C++、GO六种语言的最佳实现方式;
并且每种语言均涵盖详细的问题分析、解题思路、代码实现、代码详解、3个测试用例以及综合分析;
本文收录于专栏:《2025华为OD真题目录+全流程解析+备考攻略+经验分享》

华为OD机试真题《货币单位换算》:


文章快捷目录

题目描述及说明

Java

python

JavaScript

C++

C

GO


题目名称:货币单位换算


  1. 知识点:字符串解析、逻辑处理
  2. 时间限制:1秒
  3. 空间限制:256MB
  4. 限定语言:不限

题目描述

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

  • 输入格式
    • 第一行输入整数N(0 < N < 100),表示记录数。
    • 接下来N行,每行一条货币记录,格式为“数字+货币单位”(如100CNY53HKD87cents)。货币单位可能是单独元(如CNY)、单独分(如fen),或元与分的组合(如20CNY53fen)。
  • 汇率规则
    • 1CNY = 100fen(人民币)
    • 1HKD = 100cents(港元)
    • 1JPY = 100sen(日元)
    • 1EUR = 100eurocents(欧元)
    • 1GBP = 100pence(英镑)
    • 汇率表:100CNY = 1825JPY = 123HKD = 14EUR = 12GBP
  • 输出要求
    • 将所有货币换算为人民币分后汇总,仅保留整数部分(舍弃小数),输出不带单位。
示例

输入1

1  
100CNY  

输出1

10000  

输入2

2  
20CNY53fen  
53HKD87cents  

输出2

6432  

Java

问题分析

我们需要将不同国家的货币金额转换为人民币分(fen),并汇总所有金额的整数值。输入包含若干货币记录,每个记录可能包含元和分的组合,需要根据汇率表统一转换为人民币分后求和。


解题思路

  1. 汇率映射:根据题目提供的汇率表,建立元和分单位的转换率映射表。
  2. 字符串解析:使用正则表达式提取金额记录中的数值和单位。
  3. 金额转换:根据单位匹配对应的转换率,将金额转换为人民币分。
  4. 汇总输出:累加所有转换后的金额,取整数部分输出。

代码实现

import java.util.*;
import java.util.regex.*;public class Main {// 元单位到人民币分的转换率private static Map<String, Double> yuanRates = new HashMap<>();// 分单位到人民币分的转换率private static Map<String, Double> fenRates = new HashMap<>();static {// 初始化元单位汇率yuanRates.put("CNY", 100.0);yuanRates.put("HKD", 10000.0 / 123);yuanRates.put("JPY", 10000.0 / 1825);yuanRates.put("EUR", 10000.0 / 14);yuanRates.put("GBP", 10000.0 / 12);// 初始化分单位汇率fenRates.put("fen", 1.0);fenRates.put("cents", 100.0 / 123);fenRates.put("sen", 100.0 / 1825);fenRates.put("eurocents", 100.0 / 14);fenRates.put("pence", 100.0 / 12);}public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int N = scanner.nextInt();scanner.nextLine(); // 跳过读取剩余行double totalFen = 0.0;Pattern pattern = Pattern.compile("(\\d+)([A-Za-z]+)"); // 正则匹配数字+单位for (int i = 0; i < N; i++) {String line = scanner.nextLine();Matcher matcher = pattern.matcher(line);double lineSum = 0.0;while (matcher.find()) {int amount = Integer.parseInt(matcher.group(1)); // 提取数值String unit = matcher.group(2);                  // 提取单位Double rate = yuanRates.get(unit); // 查找元单位汇率if (rate != null) {lineSum += amount * rate;} else {rate = fenRates.get(unit);    // 查找分单位汇率if (rate != null) {lineSum += amount * rate;}}}totalFen += lineSum; // 累加当前行总fen}System.out.println((long) totalFen); // 输出整数部分}
}

代码解析

  1. 汇率表初始化

    static {yuanRates.put("CNY", 100.0);// 其他元单位汇率...fenRates.put("fen", 1.0);// 其他分单位汇率...
    }
    
    • yuanRates存储元单位到人民币分的转换率,fenRates存储分单位的转换率。
  2. 输入处理

    Scanner scanner = new Scanner(System.in);
    int N = scanner.nextInt();
    scanner.nextLine(); // 跳过换行符
    
    • 读取记录数N,并处理换行符问题。
  3. 正则表达式匹配

    Pattern pattern = Pattern.compile("(\\d+)([A-Za-z]+)");
    Matcher matcher = pattern.matcher(line);
    
    • 使用正则表达式(\d+)([A-Za-z]+)匹配金额记录中的数值和单位。
  4. 金额转换逻辑

    while (matcher.find()) {int amount = Integer.parseInt(matcher.group(1));String unit = matcher.group(2);// 查找汇率并计算fen值...
    }
    
    • 提取每个部分的数值和单位,根据单位类型查找对应汇率并转换为人民币分。
  5. 累加与输出

    totalFen += lineSum;
    System.out.println

相关文章:

  • 佳源科技退卷IPO:曾于2023年7月过会,原计划募资约9亿元
  • CAPL自动化-诊断Demo工程
  • 达梦数据库-学习-23-获取执行计划的N种方法
  • Leetcode 587. 安装栅栏
  • 针对面试- RabbitMQ消息队列篇
  • 基础编程题目集 7-1 厘米换算英尺英寸
  • java基础(面向对象高级部分)
  • 快速扩容VHD文件的DiskPart命令指南
  • 临床研究统计分析核心概念解析
  • 【AI智能体】Spring AI Tool 从使用到实战详解
  • day28JS+Node-JS打包工具Webpack
  • multiprocessing多进程使用案例
  • 使用Python,OpenCV,Tesseract-OCR对自己的运动数据图片进行识别及分析,并使用Matplotlib绘制配速图出来
  • 【b站计算机拓荒者】【2025】微信小程序开发教程 - chapter3 项目实践 -1 项目功能描述
  • 机器学习---特征降维
  • 运维Linux之Ansible详解学习(更新中)
  • Python应用运算符初解
  • Word转PDF--自动生成目录
  • 如何在uniapp H5中实现路由守卫
  • 【Vue3】(二)vue3语法详解:自定义泛型、生命周期、Hooks、路由
  • 医疗行业网站怎么做/seo排名优化培训网站
  • 苏州模板建站定制/新媒体营销策略有哪些
  • 铜川免费做网站/专业黑帽seo
  • 长春网长春网站建设站建设/上海关键词优化报价
  • 免费在线建站/市场调研报告怎么写
  • 营销伎巧第一季/seo搜索引擎优化包邮