2020年6月4日 星期四

e948: 1. 基礎代謝率 (BMR Calculation) 解題心得

題目:https://toi-reg.csie.ntnu.edu.tw/question/201903/B1-BMR(Q).pdf

每逢過年總是年菜滿漢全席、打牌零嘴永遠吃不完,每天都坐著一直吃,體重一去不復返。為了保持苗條的身材,因此要來計算每天的基礎代謝率,看每天能吃多少零嘴。基礎代謝率(BMR)是指:在身體保持靜態下消耗的最低熱量(單位:大卡)。美國運動醫學協會提供了一個公式:

BMR(男) = (13.7×體重(kg)) + (5.0×身高(cm)) - (6.8×年齡) + 66。

BMR(女) = (9.6×體重(kg)) + (1.8×身高(cm)) - (4.7×年齡) + 655。

輸入說明
第一行有一個正整數 N (1 <= N <= 20),代表要計算 BMR 的人數。接下來 i 行 (i = 1, 2, …, N),每行各有四個正整數 G、A、H、W,彼此間以空白隔開。正整 數 G:1 (男)或 0 (女),代表計算者的性別;三個正整數 A (1 <= A<= 150)、H (1 <= H <= 250)、W (1 <= W <= 300):代表計算者的年齡、身高(cm)、體重(kg)。

輸出說明
對於每筆測資輸出一個浮點數,代表該人的基礎代謝率。BMR 四捨五入至 小數點後兩位,印完一人後換行。
範例輸入 #1    範例輸出 #1
2                        
1 10 100 20        772.00
0 20 120 30        1065.00

772.00
1065.00

範例輸入 #2         範例輸出 #2         
5                            
1 55 178 89            1801.30
0 20 157 48            1304.40
1 33 162 50            1336.60
1 10 150 31            1172.70
0 29 159 51            1294.50

解題心得:
其實這題已經把從輸入到輸出的計算公式都寫得清清楚楚,唯一的挑戰點就是怎麼輸出四捨五入至小數點後兩位。

cout中就有一個控制小數位數的函數(setprecision)(「setprecision」包含在<iomanip>函式庫內)。

cout  <<  setprecision(2)  << 4.123  <<  endl;
其中(2)代表輸出的位數,所以輸出會等於4.1

那如果只是想「控制小數點的位數」呢?
很簡單,只要加上「fixed」就可以囉,

cout  << fixed  <<  setprecision(2) << 10.2514<<  endl;
這時候(2)因為前面加上fixed,所以就代表輸出小數點後兩位,也就是10.25。

附上程式碼:
#include <iostream>
#include <vector>
#include <iomanip>
using namespace std;
int main()
{
	double n, g, a, h, w;
	cin >> n;
	cout << fixed << setprecision(2);
	while (n-- > 0) {
		cin >> g >> a >> h >> w;
		if (g == 1) {
			cout << w * 13.7 + h * 5 - a * 6.8 + 66 << endl;
		}
		else {
			cout << w * 9.6 + h * 1.8 - a * 4.7 + 655 << endl;
		}
	}
}

沒有留言:

張貼留言

o079. 4. 最佳選擇

 題目描述: 給一個長度為 n 的正整數序列 a1,a2...an ,你可以執行多次操作 (包含 0 次),每次操作只能選擇這個序列的第一個或最後一個數字,再將這個數字從序列中刪除並自己搜集起來。 求滿足總和不超過 k 且搜集的數字奇數和偶數個數相同的條件下,所能搜集的數字總和最...