[202403-C]出租车

发布于:2025-08-13 ⋅ 阅读:(19) ⋅ 点赞:(0)

[202403-C]出租车

题目描述

某市的出租车收费标准为:

  • 公里数为整数。
  • 333 公里内起步价为 121212 元;
  • 超出 333 公里但不超过 202020 公里的部分每公里单价为 2.52.52.5 元;
  • 超出 202020 公里的部分每公里单价为 3.53.53.5 元。
  • 如果是在深夜用车,则在上述收费标准基础上加收 30%30\%30% 的费用。

现在小明有 sss 元,并且知道是否深夜用车,请问小明最远可以走多少公里?

输入格式

输入共一行,包含一个最多带有一位小数的浮点数 sss 和一个整数 ttt,用空格隔开。其中 sss 表示小明拥有的钱,ttt000111,表示是否深夜用车,t=0t=0t=0 表示非深夜用车,t=1t=1t=1 表示深夜用车。

输出格式

输出一个整数,表示小明最远可以走多少公里。

样例 #1

样例输入 #1

93.7 1

样例输出 #1

25

样例 #2

样例输入 #2

22 0

样例输出 #2

7

样例 #3

样例输入 #3

12 1

样例输出 #3

0

提示

数据范围

对于 20%20\%20% 的测试数据,0≤s<120\le s < 120s<12

对于另外 20%20\%20% 的测试数据,t=0t=0t=012≤s≤54.512\le s \le 54.512s54.5

对于另外 20%20\%20% 的测试数据,t=1t=1t=118≤s≤70.918\le s \le 70.918s70.9

对于所有的测试数据,t=0t=0t=0 或者 t=1t=1t=1,且 0≤s≤2000\le s \le 2000s200

🚖 题目解析:出租车收费计算最远公里数


🔍 思路分析:

  • 起步价覆盖前 3 公里,费用固定 12 元。
  • 超出 3 公里但不超过 20 公里部分,单价 2.5 元/公里。
  • 超出 20 公里部分,单价 3.5 元/公里。
  • 深夜加收 30%(即乘以 1.3)。

求“最远公里数”即最大整数公里数 ddd 满足:
总费用 ≤ 小明的钱 sss。


💡 解题步骤:

  1. 先根据是否深夜,调整单价和起步价:
    • 起步价:12×factor12 \times factor12×factor
    • 第二阶段单价:2.5×factor2.5 \times factor2.5×factor
    • 第三阶段单价:3.5×factor3.5 \times factor3.5×factor
      其中 factor=1.3factor = 1.3factor=1.3 if 深夜,否则 1.0。
  2. 从大到小判断能走多少公里:
    • 最远不超过200公里,直接从0到200枚举即可。
  3. 判断花费计算公式(公里数 ddd):
    • d≤3d \le 3d≤3 时,总价 = 起步价
    • 3<d≤203 < d \le 203<d≤20 时,总价 = 起步价 + (d - 3) * 第二阶段单价
    • d>20d > 20d>20 时,总价 = 起步价 + (20 - 3) * 第二阶段单价 + (d - 20) * 第三阶段单价

📄 C++代码实现:

#include <iostream>
using namespace std;

int main() {
	double s;  // 小明拥有的钱
	int t;     // 是否深夜 0/1
	cin >> s >> t;

	double factor = (t == 1) ? 1.3 : 1.0;
	double startPrice = 12.0 * factor;
	double price2 = 2.5 * factor;
	double price3 = 3.5 * factor;

	int maxDistance = 0;
	for (int d = 0; d <= 200; d++) {  // 枚举距离,最大200公里
		double cost = 0.0;
		if (d == 0) {
			cost = 0;  // 不走路,不花钱
		} else if (d <= 3) {
			cost = startPrice;
		} else if (d <= 20) {
			cost = startPrice + (d - 3) * price2;
		} else {
			cost = startPrice + (20 - 3) * price2 + (d - 20) * price3;
		}

		if (cost <= s) {
			maxDistance = d;
		} else {
			break;  // 超出钱数,后面不用再算了
		}
	}

	cout << maxDistance << endl;
	return 0;
}


🏆 样例验证:

  • 输入:93.7 1
    输出:25
  • 输入:22 0
    输出:7
  • 输入:12 1
    输出:0


网站公告

今日签到

点亮在社区的每一天
去签到