【题目链接】
ybt 1005:地球人口承载力估计
OpenJudge NOI 小学奥数 7653:地球人口承载力估计
【题目考点】
保留x位小数输出浮点型数字a的写法:cout<<fixed<<setprecision(x)<<a;
printf("%.xf", a);
声明浮点型变量,单精度浮点型float,双精度浮点型double输入输出浮点型变量本题考查列方程及解方程
【解题思路】
已知地球上现有资源加上新生资源可供xxx亿人生活aaa年,或供yyy亿人生活bbb年,地球最多养活zzz亿人。
设地球每年新生资源为nnn,已有资源为mmm,1亿人每年消耗资源ppp。
则有方程组:
x∗p∗a=m+a∗ny∗p∗b=m+b∗nx*p*a = m + a*n\\ y*p*b = m + b*nx∗p∗a=m+a∗ny∗p∗b=m+b∗n
使资源不枯竭,每年消耗的资源必须小于等于再生的资源,有
z∗p<=nz*p <= nz∗p<=n
即z<=n/pz <= n/pz<=n/p 地球最多能养活的人口数即为n/pn/pn/p
方程组两边除以p,得:
x∗a=m/p+a∗n/py∗b=m/p+b∗n/px*a = m/p + a*n/p\\ y*b = m/p + b*n/px∗a=m/p+a∗n/py∗b=m/p+b∗n/p
两方程相减,得:
x∗a−y∗b=(a−b)n/pn/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/pn/p=(x∗a−y∗b)/(a−b)
【题解代码】
解法1:使用cin, cout进行输入输出
#include <bits/stdc++.h>using namespace std;int main(){double x,y,a,b;cin>>x>>a>>y>>b;cout<<fixed<<setprecision(2)<<(x*a - y*b)/(a-b); return 0;}
解法2:使用scanf, printf进行输入输出
#include <bits/stdc++.h>using namespace std;int main(){double x,y,a,b;scanf("%lf %lf %lf %lf", &x, &a, &y, &b);printf("%.2f", (x*a - y*b)/(a-b)); return 0;}