[厦门小学生 C++ 2022] 打车收费 的题解
记住只在没有思路时使用题解,不要从它复制粘贴代码。请尊重题目和题解的作者。
在解题之前提交题解的代码会导致封禁。
在解题之前提交题解的代码会导致封禁。
作者:
概述
本题要求根据输入的整数里程数,按分段收费标准计算应付车费。核心解法是使用条件分支对里程所在区间进行判断,并累加对应费用。
分析
核心观察
收费标准分为三个区间: 到
公里(含)、
到
公里(含)、超过
公里,每个区间的单价不同,需按区间累加。
思路
设里程为 。
- 若
,费用为起步价
元。
- 若
,费用为起步价
元加上超出
公里的部分按每公里
元计费,即
。
- 若
,费用为起步价
元加上
到
公里区间的费用
元,再加上超出
公里的部分按每公里
元计费,即
。
所有数据为整数,因此计算结果也为整数。
具体示例
样例输入 ,属于
,直接输出
。
若输入 ,则费用为
。
若输入 ,则费用为
。
算法步骤
- 读取里程数
n。 - 根据
n的值选择对应区间计算费用:- 若
n <= 3,ans = 10; - 若
n <= 8,ans = 10 + (n - 3) * 3; - 否则,
ans = 10 + 15 + (n - 8) * 5。
- 若
- 输出
ans。
复杂度分析
- 时间:
- 空间:
实现注意事项
- 输入为正整数,无需处理负数或零。
- 费用计算使用整数运算,所有中间结果均在
int范围内(里程 < 100,最大费用约为)。
- 注意区间边界条件:
公里和
公里处的收费归属需正确(已包含在条件中)。
源代码
#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)
评论