1. 程式人生 > 其它 >《資訊學奧賽一本通 C++版》1005_地球人口承載力估計

《資訊學奧賽一本通 C++版》1005_地球人口承載力估計

技術標籤:# 第一部分 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!

Fork me on Gitee