题解
计算打车费用
1 条题解
-
0
解题思路
这是一道“分段计价”的问题,和真实坐出租车的计费一样:先有一个起步价,超过一定路程后再按每千米多少钱加价。
计价规则是这样的:
- 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