1005:地球人口承载力估计
时间限制: 1000 ms 内存限制: 65536 KB
【题目描述】
假设地球上的新生资源按恒定速度增长。照此测算,地球上现有资源加上新生资源可供x亿人生活a年,或供y亿人生活b年。
为了能够实现可持续发展,避免资源枯竭,地球最多能够养活多少亿人?
【输入】
一行,包括四个正整数x,a,y,b,两个整数之间用单个空格隔开。x>y,a<b,ax<by,各整数均不大于10000。
【输出】
一个实数z,表示地球最多养活z亿人,舍入到小数点后两位。
【输入样例】
110 90 90 210
【输出样例】
75.00
题目考点
保留x位小数输出浮点型数字a的写法:
cout<<fixed<<setprecision(x)<<a;
printf("%.xf", a);
声明浮点型变量,单精度浮点型float,双精度浮点型double
输入输出浮点型变量
本题考查列方程及解方程
【解题思路】
已知地球上现有资源加上新生资源可供 x x x亿人生活 a a a年,或供 y y y亿人生活 b b b年,地球最多养活 z z z亿人。
设地球每年新生资源为 n n n,已有资源为 m m m,1亿人每年消耗资源 p p p。
则有方程组:
x ∗ p ∗ a = m + a ∗ n y ∗ p ∗ b = m + b ∗ n x*p*a = m + a*n\\ y*p*b = m + b*n x∗p∗a=m+a∗n
y∗p∗b=m+b∗n
使资源不枯竭,每年消耗的资源必须小于等于再生的资源,有
z ∗ p < = n z*p <= n z∗p<=n
即 z < = n / p z <= n/p z<=n/p 地球最多能养活的人口数即为 n / p n/p n/p
方程组两边除以p,得:
x ∗ a = m / p + a ∗ n / p y ∗ b = m / p + b ∗ n / p x*a = m/p + a*n/p\\ y*b = m/p + b*n/p x∗a=m/p+a∗n/p
y∗b=m/p+b∗n/p
两方程相减,得:
x ∗ a − y ∗ b = ( a − b ) n / p n / p = ( x ∗ a − y ∗ b ) / ( a − b ) x*a - y*b = (a-b)n/p\\ n/p = (x*a - y*b)/(a-b) x∗a−y∗b=(a−b)n/p
n/p=(x∗a−y∗b)/(a−b)