1 条题解

  • 0
    @ 2025-9-16 1:49:58

    建议直接看代码

    核心逻辑

    该问题本质是牛吃草问题(资源可持续利用模型),核心是找到“资源增长速度 = 资源消耗速度”的平衡点——此时地球可永久养活人口,不消耗存量资源。具体推导如下:

    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

    1. 计算分子:90×210 - 110×90 = 18900 - 9900 = 9000
    2. 计算分母:210 - 90 = 120
    3. 计算 z = 9000 / 120 = 75.00,与样例输出一致。

    所有输入均按公式精确计算,且保留两位小数,符合题目要求。

    • 1

    信息

    ID
    458
    时间
    1000ms
    内存
    128MiB
    难度
    10
    标签
    递交数
    5
    已通过
    3
    上传者