题解
公园门票收费系统
1 条题解
-
0
P4311 公园门票收费系统(【入门】)
解题思路
门票原价每人 45 元,买的人越多越便宜。价格分四个档:
- 人数 ≥ 30:每人减 10 元,单价 35 元;
- 20 ≤ 人数 < 30:每人减 5 元,单价 40 元;
- 10 ≤ 人数 < 20:每人减 2 元,单价 43 元;
- 人数 < 10:没有优惠,单价 45 元。
总花费 = 人数 × 单价。所以关键是把单价算对,再乘人数。
判断的时候要从大到小判断:先看是否 ≥30,再看是否 ≥20,再看是否 ≥10。因为
if...else if是"第一个满足就不看后面的",从大到小判断可以保证人数落在正确的档位。比如人数 25,先检查n>=30不成立,再检查n>=20成立,单价定为 40,不会落到 43 那一档。拿样例来说,人数 10 属于"10≤人数<20"这一档,单价 43 元,总花费 元。
边界情况:人数为 1 时单价 45,总花费 45;人数为 500 时单价 35,总花费 ,用
int完全装得下。参考代码
// 根据购票人数计算团体票总花费 #include <iostream> using namespace std; int main() { int n; cin >> n; int p = 45; // 单价,先按原价算 if (n >= 30) p = 35; // 30人及以上每人减10元 else if (n >= 20) p = 40; // 20~29人每人减5元 else if (n >= 10) p = 43; // 10~19人每人减2元 // 10人以下保持原价45元 cout << n * p << endl; return 0; }复杂度分析
最多判断 4 次就确定了单价,无论人数多少,都只做固定几次运算,所以时间复杂度是 。只用了两个整数变量,额外空间复杂度也是 。
- 1