#t12. 出租车车费计算
出租车车费计算
出租车车费计算
题目描述
某城市普通出租车收费标准如下: 起步里程为3公里,起步费10元; 行驶里程在 3~10 公里的部分,每公里 2 元; 超过 10 公里的部分,每公里 3 元; 营运过程中,因路阻及乘客要求临时停车的,按每5分钟2元计收(不足5分钟则不收费)。
输入格式
输入在一行中给出行驶里程(单位为公里,精确到小数点后1位)与等待时间(整数,单位为分钟),其间以空格分隔。
输出格式
在一行中输出乘客应支付的车费(单位为元),结果四舍五入,保留到元。
样例输入 1
3.0 0
样例输出 1
10
样例输入 2
12.5 9
样例输出 2
34
数据范围
行驶里程 (单位:公里,精确到小数点后1位), 等待时间 (单位:分钟,整数)
提示
一、四舍五入到整数,两种写法
写法 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验证,后者能同时检验里程分段和等候费。