《資訊學奧賽一本通 C++版》1005_地球人口承載力估計
阿新 • • 發佈:2020-12-24
技術標籤:# 第一部分 C++語言《資訊學奧賽一本通》c++
題目相關
【題目描述】
假設地球上的新生資源按恆定速度增長。照此測算,地球上現有資源加上新生資源可供x億人生活a年,或供y億人生活b年。
為了能夠實現可持續發展,避免資源枯竭,地球最多能夠養活多少億人?
【輸入】
一行,包括四個正整數x,a,y,b,兩個整數之間用單個空格隔開。x>y,a<b,ax<by,各整數均不大於10000。
【輸出】
一個實數z,表示地球最多養活z億人,舍入到小數點後兩位。
【輸入樣例】
110 90 90 210
【輸出樣例】
75.00
分析
本題考察變數的計算以及浮點數的格式輸出。中間的思考過程需要進行數學推導。
假設地球每年的新生資源為up,每億人每年的消耗量為down,現有資源為 now。
根據“地球上現有資源加上新生資源可供x億人生活a年,或供y億人生活b年”可推匯出以下的式子。
now + a * up = a * x * down
now + b * up = b * y * down將兩式相減可得
up * (a - b) = down * (a * x - b * y)
up/down = (a * x - b * y)/(a - b)
題目要求實現可持續發展,也就意味著,每年資源的新生量要和每年的消耗量持平。也就得到了如下的式子
people * down = up
people =up/down
而 up/down = (a * x - b * y)/(a - b)
所以只需根據輸入的a,x,b,y的值進行計算即可。
輸出時注意程式的格式,要保留兩位小數。可以使用printf("%.2f")的形式保留兩位小數進行輸出。
程式碼實現
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
int x,a,y,b;
double z;
cin>>x>>a>>y>>b;
/*
設地球現有資源now,每年新增up,每年消耗down
若可持續發展
year*up = z*year*down
z = up/down
now + a*up = a*x*down
now + b*up = b*y*down
兩式相減
a*up-b*up = a*x*down-b*y*down
up(a-b) = down(ax - by)
up/down = (ax - by)/(a-b)
*/
z=(1.0*a*x-b*y)/(1.0*a-b);//計算出浮點數結果 浮點數與整數計算結果為浮點型別
printf("%.2f",z);
return 0;
}
視訊講解
原始碼
原始碼上傳至Gitee倉庫中,歡迎star!