GESP2023年12月认证C++三级( 第三部分编程题(2、单位转换))


📏《单位转换王国大冒险》


一、🏰 故事开始:数字王国的作业危机

在数学王国里,住着一个爱学习的小朋友 ------ 小杨。👦

这一天,老师布置了很多单位转换作业:

  • 1 km = ? mm

  • 20 kg = ? g

  • 100 m = ? mm

小杨一看,题目太多啦!😵

于是他说:

我要用 C++ 魔法来帮我做作业!✨

你的任务就是帮助小杨写程序!


二、🎯 题目要求

我们只做 大单位变小单位


1、📏 长度家族

它们的关系是:

复制代码
1 km = 1000 m
1 m = 1000 mm

所以:

复制代码
1 km = 1000000 mm

2、⚖️ 重量家族

它们的关系是:

复制代码
1 kg = 1000 g
1 g = 1000 mg

所以:

复制代码
1 kg = 1000000 mg

3、📘 输入例子

复制代码
2
1 km = ? mm
1 m = ? mm

4、📗 输出例子

复制代码
1 km = 1000000 mm
1 m = 1000 mm

三、🧠 解题思路


1、🌟 第一步:先读题目数量

复制代码
2

表示有两道题。


2、🌟 第二步:一题一题读

例如:

复制代码
1 km = ? mm

我们要取出:

  • 数字:1

  • 原单位:km

  • 目标单位:mm


3、🌟 第三步:查倍率表

我们给每个单位一个"价值":

单位
km 1000000
m 1000
mm 1
kg 1000000
g 1000
mg 1

4、🌟 第四步:计算答案

例如:

复制代码
1 km -> mm

计算:

复制代码
1 × 1000000 ÷ 1 = 1000000

例如:

复制代码
20 kg -> g

计算:

复制代码
20 × 1000000 ÷ 1000 = 20000

四、💻 参考程序

复制代码
#include <iostream>
#include <string>
using namespace std;

// 返回单位对应的倍率
long long getValue(string s)
{
    if(s == "km") return 1000000;
    if(s == "m")  return 1000;
    if(s == "mm") return 1;

    if(s == "kg") return 1000000;
    if(s == "g")  return 1000;
    if(s == "mg") return 1;

    return 1;
}

int main()
{
    int T;
    cin >> T;

    while(T--)
    {
        long long x;
        string a, b, equalSign, questionMark;

        cin >> x >> a >> equalSign >> questionMark >> b;

        long long ans = x * getValue(a) / getValue(b);

        cout << x << " " << a << " = " << ans << " " << b << endl;
    }

    return 0;
}

五、🪄 程序讲解


1、🎯 读取一整题

输入:

复制代码
1 km = ? mm

程序读成:

复制代码
x = 1
a = km
equalSign = =
questionMark = ?
b = mm

2🎯 计算答案

复制代码
ans = x * getValue(a) / getValue(b);

例子:

复制代码
1 km = ? mm

变成:

复制代码
1 × 1000000 ÷ 1
= 1000000

3、🎯 输出格式

复制代码
cout << x << " " << a << " = " << ans << " " << b;

输出:

复制代码
1 km = 1000000 mm

六、🌟 解题小窍门:

我们把所有单位都先变成最小单位:

  • 长度都变成 mm

  • 重量都变成 mg

这叫:

🪄 统一单位法


1、🎁 再来几个例子


📏 例1

复制代码
100 m = ? mm

计算:

复制代码
100 × 1000 = 100000

⚖️ 例2

复制代码
200 g = ? mg

计算:

复制代码
200 × 1000 = 200000

⚖️ 例3

复制代码
0 kg = ? mg

计算:

复制代码
0 × 1000000 = 0

2、⏱️ 时间复杂度

每题只做一次计算:

复制代码
O(1)

总共 T 题:

复制代码
O(T)

非常快!⚡


七、🏆 本题考点:

✅ 输入多个数据

✅ 字符串读取

✅ 自定义函数

✅ 单位换算

✅ 数学计算


八、🌟 记忆口诀

大单位变小单位,数字变大别怕累!

先变最小再转换,程序计算真方便!


相关推荐
cpp_25013 小时前
P2347 [NOIP 1996 提高组] 砝码称重
数据结构·c++·算法·题解·洛谷·noip·背包dp
Hugh-Yu-1301233 小时前
二元一次方程组求解器c++代码
开发语言·c++·算法
楼田莉子3 小时前
同步/异步日志系统:日志落地模块\日志器模块\异步日志模块
linux·服务器·c++·学习·设计模式
文祐3 小时前
C++类之虚函数表及其内存布局
开发语言·c++
小狄同学呀3 小时前
同样的global,不同的audioLibPath——记一次诡异的内存错位
c++·windows
编程大师哥3 小时前
C++类和对象
开发语言·c++·算法
Rabitebla4 小时前
C++ 和 C 语言实现 Stack 对比
c语言·数据结构·c++·算法·排序算法
旖-旎4 小时前
递归(汉诺塔问题)(1)
c++·学习·算法·leetcode·深度优先·递归
深邃-4 小时前
【数据结构与算法】-顺序表链表经典算法
java·c语言·数据结构·c++·算法·链表·html5