【题目链接】
ybt 1005:地球人口承载力估计
OpenJudge NOI 小学奥数 7653:地球人口承载力估计
【题目考点】
- 保留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∗ny∗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/py∗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/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;
}