[厦门小学生 C++ 2022] 打车收费 的题解


记住只在没有思路时使用题解,不要从它复制粘贴代码。请尊重题目和题解的作者。
在解题之前提交题解的代码会导致封禁。

作者: admin

概述

本题要求根据输入的整数里程数,按分段收费标准计算应付车费。核心解法是使用条件分支对里程所在区间进行判断,并累加对应费用。

分析
核心观察

收费标准分为三个区间:0 到 3 公里(含)、3 到 8 公里(含)、超过 8 公里,每个区间的单价不同,需按区间累加。

思路

设里程为 n。

  • 若 n \le 3,费用为起步价 10 元。
  • 若 3 < n \le 8,费用为起步价 10 元加上超出 3 公里的部分按每公里 3 元计费,即 10 + (n - 3) \times 3。
  • 若 n > 8,费用为起步价 10 元加上 3 到 8 公里区间的费用 (8 - 3) \times 3 = 15 元,再加上超出 8 公里的部分按每公里 5 元计费,即 10 + 15 + (n - 8) \times 5。

所有数据为整数,因此计算结果也为整数。

具体示例

样例输入 2,属于 n \le 3,直接输出 10。
若输入 5,则费用为 10 + (5 - 3) \times 3 = 16。
若输入 10,则费用为 10 + 15 + (10 - 8) \times 5 = 35。

算法步骤
  1. 读取里程数 n。
  2. 根据 n 的值选择对应区间计算费用:
    • 若 n <= 3,ans = 10;
    • 若 n <= 8,ans = 10 + (n - 3) * 3;
    • 否则,ans = 10 + 15 + (n - 8) * 5。
  3. 输出 ans。
复杂度分析
  • 时间:O(1)
  • 空间:O(1)
实现注意事项
  • 输入为正整数,无需处理负数或零。
  • 费用计算使用整数运算,所有中间结果均在 int 范围内(里程 < 100,最大费用约为 10+15+92*5=485)。
  • 注意区间边界条件:3 公里和 8 公里处的收费归属需正确(已包含在条件中)。
源代码
#include <iostream>
using namespace std;

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

    int ans;
    if (n <= 3) {
        ans = 10;
    } else if (n <= 8) {
        ans = 10 + (n - 3) * 3;
    } else {
        ans = 10 + 15 + (n - 8) * 5;
    }

    cout << ans << endl;
    return 0;
}
n = int(input())

if n <= 3:
    ans = 10
elif n <= 8:
    ans = 10 + (n - 3) * 3
else:
    ans = 10 + 15 + (n - 8) * 5

print(ans)

评论

目前没有评论。