您的位置:首页 > 新闻 > 资讯 > 博物馆网页设计案例_公众号排版设计_百度小说排行榜2021_58网络推广

博物馆网页设计案例_公众号排版设计_百度小说排行榜2021_58网络推广

2025/1/8 4:27:09 来源:https://blog.csdn.net/CodeClimb/article/details/144772954  浏览:    关键词:博物馆网页设计案例_公众号排版设计_百度小说排行榜2021_58网络推广
博物馆网页设计案例_公众号排版设计_百度小说排行榜2021_58网络推广

【华为OD-E卷 - 货币单位换算 100分(python、java、c++、js、c)】

题目

记账本上记录了若干条多国货币金额,需要转换成人民币分(fen),汇总后输出。
每行记录一条金额,金额带有货币单位,格式为数字+单位,可能是单独元,或者单独分,或者元与分的组合。
要求将这些货币全部换算成人民币分(fen)后进行汇总,汇总结果仅保留整数,小数部分舍弃。
元和分的换算关系都是1:100,如下:
1CNY=100fen(1元=100分)
1HKD=100cents(1港元=100港分)
1JPY=100sen(1日元=100仙)
1EUR=100eurocents(1欧元=100欧分)
1GBP=100pence(1英镑=100便士)
汇率表如下:
CNY JPY HKD EUR GBP 100 1825 123 14 12 即:100CNY = 1825JPY = 123HKD = 14EUR = 12GBP

输入描述

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

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

输出描述

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

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

用例

用例一:
输入:
1
100CNY
输出:
10000
用例二:
输入:
1
3000fen
输出:
3000
用例三:
输入:
1
123HKD
输出:
10000
用例四:
输入:
2
20CNY53fen
53HKD87cents
输出:
6432

python解法

  • 解题思路:
  • 本题要求将多条记录中的货币金额转换为分(fen),并求得总金额。每条记录包含不同的货币及其金额。我们需要根据不同货币的汇率将其统一转换成分(fen),然后累加所有金额。

解决步骤:
定义汇率转换表:

题目提供了不同货币到 fen 的汇率,我们需要用字典 rates 存储这些汇率。每种货币对应其兑换成 fen 的比率。例如,1 CNY = 100 fen;1 JPY = 100 / 1825 fen,依此类推。
正则表达式提取货币和金额:

对每条记录使用正则表达式 re.findall 来提取金额和货币。正则表达式 (\d+)(CNY|JPY|HKD|EUR|GBP|fen|cents|sen|eurocents|pence) 会匹配形如 123CNY、456JPY 这样的字符串,提取出数字部分和货币部分。
汇率转换:

对于每条记录中的所有金额和货币,我们用相应货币的汇率将其转换为 fen。根据汇率将金额乘以汇率,得到该货币的 fen 结果。
求和:

将所有转换成 fen 的金额加起来,得到总金额。
返回结果:

返回总金额并转换为整数。

import re  # 导入正则表达式模块,用于提取金额和货币def convert_currency_to_fen(records):# 定义各个货币与fen的兑换比例rates = {"CNY": 100,  # 1 CNY = 100 fen"JPY": 100 / 1825 * 100,  # 1 JPY = 100 / 1825 * 100 fen"HKD": 100 / 123 * 100,  # 1 HKD = 100 / 123 * 100 fen"EUR": 100 / 14 * 100,  # 1 EUR = 100 / 14 * 100 fen"GBP": 100 / 12 * 100,  # 1 GBP = 100 / 12 * 100 fen"fen": 1,  # 1 fen = 1 fen"cents": 100 / 123,  # 1 cent = 100 / 123 fen"sen": 100 / 1825,  # 1 sen = 100 / 1825 fen"eurocents": 100 / 14,  # 1 eurocent = 100 / 14 fen"pence": 100 / 12  # 1 pence = 100 / 12 fen}# 使用正则表达式提取每条记录中的金额和货币类型,并根据汇率转换成fen,计算总和total_fen = sum(int(amount) * rates[currency]  # 计算每条记录的fen值for record in records  # 遍历每条记录for amount, currency in re.findall(  # 提取金额和货币r"(\d+)(CNY|JPY|HKD|EUR|GBP|fen|cents|sen|eurocents|pence)", record))  # 匹配金额和货币return int(total_fen)  # 返回总金额(取整)# 读取输入
n = int(input())  # 记录的条数
records = [input() for _ in range(n)]  # 读取每一条记录# 输出总金额
print(convert_currency_to_fen(records))

java解法

  • 解题思路
  • 本题要求将多条记录中的货币金额转换为分(fen),并求得总金额。每条记录包含不同的货币及其金额。我们需要根据不同货币的汇率将其统一转换成分(fen),然后累加所有金额。

解决步骤:
定义汇率转换表:

题目给出了不同货币到 fen 的汇率。我们需要用一个 Map 存储这些汇率。每种货币都对应一个兑换成 fen 的比率。例如,1 CNY = 100 fen;1 JPY = 100 / 1825 fen,依此类推。
正则表达式提取货币和金额:

每条记录中可能包含多个货币及其金额,我们可以使用正则表达式 Pattern 来匹配记录中的金额和货币。通过正则表达式提取出数字部分(金额)和货币部分(如 CNY、JPY 等)。
汇率转换:

对于每条记录中的每一对 (amount, currency),我们根据 rates 中的汇率将金额转换为 fen。然后将所有金额累加得到总金额。
返回结果:

由于结果可能是浮动值,我们将其转换为整数并返回。返回值表示所有货币金额转换为 fen 后的总和。

import java.util.*;
import java.util.regex.*;public class Main {public static void main(String[] args) {// 创建Scanner对象读取输入Scanner sc = new Scanner(System.in);// 读取记录的条数int n = sc.nextInt();sc.nextLine();  // 读取换行符// 读取所有记录String[] rec = new String[n];for (int i = 0; i < n; i++) {rec[i] = sc.nextLine();}// 创建货币转换器对象CurrencyConverter converter = new CurrencyConverter();// 输出转换后的总金额System.out.println(converter.convertToFen(rec));}
}class CurrencyConverter {private final Map<String, Double> rates;  // 存储货币到fen的汇率private final Pattern regex;  // 用于匹配金额和货币的正则表达式// 构造函数,初始化汇率表public CurrencyConverter() {rates = new HashMap<>();// 设置各货币与fen的汇率rates.put("CNY", 100.0);  // 1 CNY = 100 fenrates.put("JPY", 100.0 / 1825 * 100);  // 1 JPY = 100 / 1825 * 100 fenrates.put("HKD", 100.0 / 123 * 100);  // 1 HKD = 100 / 123 * 100 fenrates.put("EUR", 100.0 / 14 * 100);  // 1 EUR = 100 / 14 * 100 fenrates.put("GBP", 100.0 / 12 * 100);  // 1 GBP = 100 / 12 * 100 fenrates.put("fen", 1.0);  // 1 fen = 1 fenrates.put("cents", 100.0 / 123);  // 1 cent = 100 / 123 fenrates.put("sen", 100.0 / 1825);  // 1 sen = 100 / 1825 fenrates.put("eurocents", 100.0 / 14);  // 1 eurocent = 100 / 14 fenrates.put("pence", 100.0 / 12);  // 1 pence = 100 / 12 fen// 定义正则表达式用于匹配货币和金额regex = Pattern.compile("(\\d+)(CNY|JPY|HKD|EUR|GBP|fen|cents|sen|eurocents|pence)");}// 将记录转换为fen并求和public int convertToFen(String[] rec) {double total = 0;  // 初始化总金额为0// 遍历所有记录for (String r : rec) {Matcher matcher = regex.matcher(r);  // 获取正则匹配器while (matcher.find()) {  // 在记录中查找符合条件的金额和货币int amount = Integer.parseInt(matcher.group(1));  // 获取金额部分String currency = matcher.group(2);  // 获取货币类型total += amount * rates.get(currency);  // 累加转换后的fen金额}}return (int) total;  // 返回总金额,转换为整数}
}

C++解法

  • 解题思路
更新中

C解法

  • 解题思路

  • 本题要求将一组货币金额记录转换为 fen,并求出它们的总和。输入的数据是每条记录由一个金额和一个货币单位组成,货币单位有很多种,需要根据不同的货币单位进行汇率转换。

主要步骤:
读取输入:

先输入一个整数 n,表示记录的数量。
接着读取 n 条记录,每条记录包含一个金额和一个货币单位。
货币单位汇率转换:

根据不同的货币单位(如 CNY、JPY、HKD 等),将金额转换为 fen。汇率通过 getRate 函数获得。
汇率已知,1 CNY = 100 fen,1 JPY = 100/1825 * 100 fen 等。
解析记录:

每条记录中包括一个金额和货币单位。通过遍历记录字符串,将数字部分作为金额,字母部分作为货币单位。
使用 getRate 函数将金额转换为 fen 并累加。
输出结果:

最后,输出转换后的总 fen 数量(取整后输出)。

#include <stdio.h>
#include <string.h>
#include <ctype.h>// 函数:根据货币单位返回相应的汇率,所有的汇率都相对于 fen
double getRate(const char* unt) {// 判断输入的货币单位并返回相应的汇率if (strcmp(unt, "CNY") == 0)return 100.0;  // 1 CNY = 100 fenelse if (strcmp(unt, "JPY") == 0)return 100.0 / 1825 * 100;  // 1 JPY = 100 / 1825 * 100 fenelse if (strcmp(unt, "HKD") == 0)return 100.0 / 123 * 100;  // 1 HKD = 100 / 123 * 100 fenelse if (strcmp(unt, "EUR") == 0)return 100.0 / 14 * 100;  // 1 EUR = 100 / 14 * 100 fenelse if (strcmp(unt, "GBP") == 0)return 100.0 / 12 * 100;  // 1 GBP = 100 / 12 * 100 fenelse if (strcmp(unt, "fen") == 0)return 1.0;  // 1 fen = 1 fenelse if (strcmp(unt, "cents") == 0)return 100.0 / 123;  // 1 cent = 100 / 123 fenelse if (strcmp(unt, "sen") == 0)return 100.0 / 1825;  // 1 sen = 100 / 1825 fenelse if (strcmp(unt, "eurocents") == 0)return 100.0 / 14;  // 1 eurocent = 100 / 14 fenelse if (strcmp(unt, "pence") == 0)return 100.0 / 12;  // 1 pence = 100 / 12 fenelsereturn 0.0;  // 如果货币单位无法识别,返回0
}int main() {int n;scanf("%d", &n);  // 读取记录的数量getchar();  // 读取换行符double total = 0;  // 用于存储总金额// 逐条处理记录for (int i = 0; i < n; i++) {char rec[100];  // 用于存储一条记录fgets(rec, 100, stdin);  // 读取一行记录int amt = 0;  // 用于存储金额char unt[20] = "";  // 用于存储货币单位int len = strlen(rec);  // 获取记录的长度// 逐字符遍历记录for (int j = 0; j < len; j++) {char c = rec[j];// 如果是数字字符,则累加到 amt(金额)中if (isdigit(c)) {amt = amt * 10 + (c - '0');}// 如果是字母字符,表示货币单位,提取出完整的货币单位else if (isalpha(c)) {int k = 0;while (j < len && isalpha(rec[j])) {  // 提取连续字母组成的货币单位unt[k++] = rec[j++];}unt[k] = '\0';  // 结束字符// 根据提取的货币单位计算金额,并累加到总金额中total += amt * getRate(unt);amt = 0;  // 重置金额unt[0] = '\0';  // 清空货币单位j--;  // 回退一位,因为 j 在 while 循环结束后会多进一位}}}// 输出总金额(取整后输出)printf("%d\n", (int)total);return 0;
}

JS解法

  • 解题思路

  • 本题要求将输入的货币金额记录转换为 fen 单位,并计算所有金额的总和。每条记录包含一个金额和一个货币单位,目标是根据单位进行转换并计算总和。

主要步骤:
读取输入:

第一行输入一个整数 n,表示记录的数量。
接着读取 n 条记录,每条记录包含一个金额和货币单位。
货币单位汇率转换:

使用汇率字典 rates 将不同货币单位转换为 fen 单位。
汇率的转换基于给定的货币与 fen 的比例。例如 1 CNY = 100 fen,1 JPY = 100 / 1825 * 100 fen 等。
解析记录:

使用正则表达式从每条记录中提取出金额和货币单位。
根据货币单位从 rates 中查找相应的汇率,将金额转换为 fen 并累加到总和 sum 中。
输出结果:

最后,输出所有记录对应金额的总和,取整后返回

const rl = require("readline").createInterface({input: process.stdin,  // 设置标准输入output: process.stdout, // 设置标准输出
});const records = []; // 用于存储输入的记录
rl.on("line", (line) => {records.push(line);  // 每次读取一行,保存到 records 数组中if (records.length === parseInt(records[0]) + 1) {  // 判断是否已经读入所有记录records.shift();  // 移除第一行,它是记录的数量console.log(computeTotalFen(records));  // 调用函数计算总金额并输出rl.close();  // 关闭输入流}
});// 计算所有记录转换为 fen 后的总金额
function computeTotalFen(entries) {// 汇率字典,定义了各个货币单位与 fen 的转换关系const rates = {CNY: 100,  // CNY 1 = 100 fenJPY: (100 / 1825) * 100,  // JPY 1 = 100 / 1825 * 100 fenHKD: (100 / 123) * 100,  // HKD 1 = 100 / 123 * 100 fenEUR: (100 / 14) * 100,  // EUR 1 = 100 / 14 * 100 fenGBP: (100 / 12) * 100,  // GBP 1 = 100 / 12 * 100 fenfen: 1,  // fen 1 = 1 fencents: 100 / 123,  // cents 1 = 100 / 123 fensen: 100 / 1825,  // sen 1 = 100 / 1825 feneurocents: 100 / 14,  // eurocents 1 = 100 / 14 fenpence: 100 / 12,  // pence 1 = 100 / 12 fen};// 正则表达式:用于匹配记录中的金额和货币单位const currencyPattern = /(\d+)((CNY)|(JPY)|(HKD)|(EUR)|(GBP)|(fen)|(cents)|(sen)|(eurocents)|(pence))/g;let sum = 0;  // 用于存储所有金额的总和// 遍历每条记录for (const record of entries) {let result;// 使用正则表达式匹配记录中的金额和货币单位while ((result = currencyPattern.exec(record)) !== null) {const amount = parseInt(result[1]);  // 获取金额部分const unit = result[2];  // 获取货币单位sum += amount * rates[unit];  // 根据汇率转换并累加到总金额}}// 返回总金额,取整return Math.floor(sum);
}

注意:

如果发现代码有用例覆盖不到的情况,欢迎反馈!会在第一时间修正,更新。
解题不易,如对您有帮助,欢迎点赞/收藏

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com