每逢過年總是年菜滿漢全席、打牌零嘴永遠吃不完,每天都坐著一直吃,體重一去不復返。為了保持苗條的身材,因此要來計算每天的基礎代謝率,看每天能吃多少零嘴。基礎代謝率(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;
}
}
}
沒有留言:
張貼留言