#t12. 出租车车费计算

出租车车费计算

出租车车费计算

题目描述

某城市普通出租车收费标准如下: 起步里程为3公里,起步费10元; 行驶里程在 3~10 公里的部分,每公里 2 元; 超过 10 公里的部分,每公里 3 元; 营运过程中,因路阻及乘客要求临时停车的,按每5分钟2元计收(不足5分钟则不收费)。

输入格式

输入在一行中给出行驶里程(单位为公里,精确到小数点后1位)与等待时间(整数,单位为分钟),其间以空格分隔。

输出格式

在一行中输出乘客应支付的车费(单位为元),结果四舍五入,保留到元。

样例输入 1

3.0 0

样例输出 1

10

样例输入 2

12.5 9

样例输出 2

34

数据范围

0.0≤0.0 \le 行驶里程 ≤1000.0 \le 1000.0(单位:公里,精确到小数点后1位),0≤0 \le 等待时间 ≤1000 \le 1000(单位:分钟,整数)

提示

一、四舍五入到整数,两种写法

写法 1:用 printf 的格式

printf("%.0f\n", 3.6);   // 4
printf("%.0f\n", 3.4);   // 3

%.0f 表示保留 0 位小数,printf 会自己做四舍五入(按「四舍六入五成双」的规则,.5 时可能向偶数靠)。

写法 2:手写 (int)(x + 0.5)

int r = (int)(3.6 + 0.5);   // (int)4.1 = 4
int s = (int)(3.4 + 0.5);   // (int)3.9 = 3

原理:加上 0.5 之后,小数部分 ≥ 0.5 的会进位到下一个整数,再截断就相当于四舍五入。必须先加再转,写成 (int)x + 0.5 就变成先截断再加,全错。

二、负数的坑

(int)(x + 0.5) 对负数是错的:

x = -2.5;  (-2.5 + 0.5) = -2.0  →  (int) = -2

数学上 -2.5 四舍五入是 -3(或 -2,看约定),但绝不是「加 0.5 再截断」这么简单。题目一般是非负的金额、距离,暂时不用管;遇到负数要单独处理。

三、哪种更好

  • 只是输出 → 用 %.0f,一行搞定;
  • 结果还要参与后续计算 → 用 (int)(x + 0.5) 存成整数。

四、常见错误

  • 写成 (int)(x) + 0.5;

  • 用 %.0f 输出后又要拿它当整数用(它只是打印格式,变量本身没变)。

  • 车费 = 起步价 + 里程费 + 等候费,里程费要分三段累加。

  • 等候费按「每 5 分钟 2 元」,不足 5 分钟的部分直接丢掉。

  • 最后按题面要求四舍五入到元。

自查:用 3.0 0 → 10 和 12.5 9 → 34 验证,后者能同时检验里程分段和等候费。