一本通-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} $$