一、先看原题:



二、题目解析:
1、题目故事
小杨是爱心小志愿者📦
他每周帮大家寄快递,快递公司为了支持公益,有 两种收费方法:
🚚 方法一:按体积收费
👉 体积 ÷ 2 = 运费
⚖ 方法二:按重量收费
-
如果重量 小于 300 克 → 收 第一档价格
-
如果重量 ≥ 300 克 → 收 第二档价格
💡 快递公司叔叔说:
"我们要选对小杨最便宜的收费方式!"
2、输入输出要求(翻译成"人话")
输入(4 行):
1️⃣ 快递体积 V
2️⃣ 快递重量 G
3️⃣ 轻快递价格 M
4️⃣ 重快递价格 N
👉 都是带 1 位小数的数字
输出:
👉 最终运费(保留 1 位小数)
3、解题思路(给小学生的"三步法")
(1)🪜 第一步:算体积价
cpp
体积价 = V / 2
就像:
📦 "这个盒子有多大?除以 2 就是钱。"
(2)🪜 第二步:算重量价
像一个判断题👇
cpp
如果重量 < 300 → 用 M
否则 → 用 N
C++ 程序中写法:
cpp
double weightPrice;
if (G < 300)
weightPrice = M;
else
weightPrice = N;
(3)🪜 第三步:选更便宜的!
cpp
最终价格 = min(体积价, 重量价)
4、参考程序
cpp
#include <iostream>
#include <cstdio>
using namespace std;
int main() {
double V, G, M, N;
// 输入
cin >> V >> G >> M >> N;
// 按体积收费
double priceByVolume = V / 2.0;
// 按重量收费
double priceByWeight;
if (G < 300)
priceByWeight = M;
else
priceByWeight = N;
// 选择更便宜的
double result;
if (priceByVolume < priceByWeight)
result = priceByVolume;
else
result = priceByWeight;
// 输出一位小数
printf("%.1f\n", result);
return 0;
}
5、这道题考了什么?
| 知识点 | 是否核心 |
|---|---|
| double 浮点数 | ⭐⭐⭐ |
| if 判断 | ⭐⭐⭐⭐ |
| 比较大小 | ⭐⭐⭐ |
| printf 控制小数 | ⭐⭐⭐⭐ |
📌 这是 1 级"必会模板题"
❌ 初学者常见错误
❌ 忘了 .0
cpp
V / 2 // ❌ 整数除法
✅ 正确:
cpp
V / 2.0
❌ 输出没控制小数
❌ 把 < 300 写成 <= 300