1 条题解
-
0
建议直接看代码
核心逻辑
该问题本质是牛吃草问题(资源可持续利用模型),核心是找到“资源增长速度 = 资源消耗速度”的平衡点——此时地球可永久养活人口,不消耗存量资源。具体推导如下:
1. 定义变量
- 设地球现有资源总量为
S,每年新生资源量为r(单位:资源单位/年); - 每人每年消耗资源为
1单位(单位可统一,不影响结果)。
2. 建立方程(两种消耗场景)
根据“现有资源 + 新生资源 = 总消耗资源”,列两个方程:
- 场景1:
x亿人生活a年 →S + a×r = x×a×1 - 场景2:
y亿人生活b年 →S + b×r = y×b×1
3. 求解新生资源速度
r联立方程消去
S(两式相减):
[ (S + b×r) - (S + a×r) = y×b - x×a ]
化简得:
[ r = \frac{y×b - x×a}{b - a} ]4. 可持续人口
z可持续发展的核心是“不消耗存量资源”,仅靠新生资源养活人口,因此:
[ z = r ]
(z即每年新生资源量可支撑的人口数,超过则消耗存量,资源终将枯竭)代码实现
C
#include <stdio.h> int main() { int x, a, y, b; scanf("%d %d %d %d", &x, &a, &y, &b); // 计算新生资源速度r(即最多养活人数z) double numerator = 1.0 * y * b - x * a; // 分子(转为浮点避免整数溢出) double denominator = b - a; // 分母 double z = numerator / denominator; printf("%.2f\n", z); // 保留两位小数 return 0; }C++
#include <bits/stdc++.h> using namespace std; int main() { int x, a, y, b; cin >> x >> a >> y >> b; double numerator = 1.0 * y * b - x * a; double denominator = b - a; double z = numerator / denominator; cout << fixed << setprecision(2) << z << endl; // 固定两位小数 return 0; }Python
# 读取输入并转换为整数 x, a, y, b = map(int, input().split()) # 计算最多养活人数z numerator = y * b - x * a denominator = b - a z = numerator / denominator # 保留两位小数输出 print("{0:.2f}".format(z)) # 或 print(f"{z:.2f}")验证(样例输入
110 90 90 210)- 计算分子:
90×210 - 110×90 = 18900 - 9900 = 9000 - 计算分母:
210 - 90 = 120 - 计算
z = 9000 / 120 = 75.00,与样例输出一致。
所有输入均按公式精确计算,且保留两位小数,符合题目要求。
- 设地球现有资源总量为
- 1
信息
- ID
- 458
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 10
- 标签
- 递交数
- 5
- 已通过
- 3
- 上传者