top1编程
← 返回题目
题解

计算打车费用

1 条题解

  • 0
    @ 2026-8-4 10:20:43

    解题思路

    这是一道“分段计价”的问题,和真实坐出租车的计费一样:先有一个起步价,超过一定路程后再按每千米多少钱加价。

    计价规则是这样的:

    • 2 千米以内(含 2 千米),一口价 6 元起步费;
    • 超过 2 千米后,每超过 1 千米加 2 元。

    所以我们要先把路程和 2 比较:

    • 如果 n <= 2,费用就是 6 元;
    • 如果 n > 2,那么前 2 千米付起步费 6 元,剩下的 (n - 2) 千米按每千米 2 元计费,总费用 = 6 + (n - 2) × 2。

    拿样例验证一下:n = 8 时,前 2 千米 6 元,还有 8 - 2 = 6 千米,每千米 2 元就是 12 元,一共 6 + 12 = 18 元,和输出样例一致。

    注意边界:n = 2 属于“2千米以内”,只付 6 元;n = 3 时,总费用 = 6 + 1 × 2 = 8 元。写程序时千万不要把 n = 2 的情况放错区间,否则会多算钱。

    参考代码

    #include using namespace std;

    int main() { int n; // n 表示从家到游乐场的千米数 cin >> n; // 读入千米数

    int money;    // money 用来保存打车费用
    if (n <= 2) {              // 2千米以内(含2千米)
        money = 6;             // 只付起步费 6 元
    } else {                   // 超过 2 千米
        money = 6 + (n - 2) * 2;  // 起步费6元 + 超出部分(n-2)千米 × 每千米2元
    }
    
    cout << money << endl;     // 输出总费用
    return 0;
    

    }

    复杂度分析

    题目中 n 表示路程千米数,最大是 1000。程序只做一次比较、一次减法和一次乘法,运算次数固定,不会随着 n 的增大而变多,所以时间复杂度是 O(1)。只用了两个 int 变量,空间复杂度也是 O(1)。

    • 1