跳转至

一本通-1005:地球人口承载力估计(C++语言入门)

【题目描述】 假设地球上的新生资源按恒定速度增长。照此测算,地球上现有资源加上新生资源可供x亿人生活a年,或供y亿人生活b年。

为了能够实现可持续发展,避免资源枯竭,地球最多能够养活多少亿人?

【输入】 输入只有一行,包括四个正整数x,a,y,b,两个整数之间用单个空格隔开。x>y,a<b,ax<by,各整数均不大于10000。

【输出】 一个实数z,表示地球最多养活z亿人,舍入到小数点后两位。

【输入样例】 110 90 90 210

【输出样例】 75.00


#include <iostream>
#include <iomanip>
#include <vector>
#include <string>
#include <queue>
#include <set>
#include <map>
#include <algorithm>
#include <cmath>
#include <climits>
#include <cstdio>

using namespace std;

int main()
{
    std::ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);

    int x, a, y, b;
    cin >> x >> a >> y >> b;
    cout << fixed << setprecision(2) << (a * x - b * y) * 1.0 / (a - b) << endl;

    return 0;
}

这道题目标识是小学奥数,其实最关键的还是去读懂题意,资源按照恒定的速度增长,意味着每年的增量是个固定的数字,而不是按照以往的指数来计算。另外考虑对“可持续发展,避免资源枯竭”的理解,假设原始资源总量为k,每年增长为d,每一亿人口每年的资源消耗量为s,假设能够支持的人口总量为m,则如果ms > d,那么意味着每过一年就会消耗原始的资源,所以相等的时候是最大的人口量。 $$ k + a \cdot d = a\cdot x\cdot s \ k + b \cdot d = b \cdot y \cdot s \ m = \frac{d}{s} = \frac{ax-by}{a-b} $$