ZeroJudge E807: 降雨量統計 (Rainfall statistics)

暑假期間,受到颱風及西南季風影響,大量的降雨使得高熊市淹水情況嚴重, 讓冬冬市長氣氣氣氣氣。於是,住在高雄的冬粉想整理統計一週內(週一至週日) 的降雨情形,一起分擔市長的煩惱。 請你根據題目給定的資料,輸出冬粉想知道的降雨資訊。每日統計降雨量的 時段分別為:上午 (morning)、下午 (afternoon)、晚間 (night)、清晨 (early morning) 四個時段,每日總降雨量為四個時段的加總。

範例測資

範例輸入範例輸出
輸入共有七行,每行依序表示週一至週日的降雨資訊。一行有 4 個浮點數: M、A、N、E(浮點數均為小數點後第一位,0 <= M、A、N、E <= 50),依序代表每天四個時段的降雨量(單位:毫米)。對於每筆測資輸出一個正整數 D 和一個時段,以換行間隔。第一行的正整 數 D (1 <= D <= 7),代表一週內降雨量最多的日子 (1~7 分別代表週一至週日)。 第二行輸出一週內降雨量最多時段。測資不會有重複的最大每日降雨總量和最大時段降雨總量的情況
2.3 18.4 0.3 0.0
1.5 10.8 22.4 11.1
0.5 15.8 25.0 16.4
0.0 4.6 0.0 0.4
9.7 5.9 3.2 1.7
1.8 2.1 0.0 7.2
0.7 10.2 2.2 5.8
3
afternoon
10.7 2.6 7.8 20.0
2.7 3.5 40.1 35.4
0.0 13.2 20.6 12.1
19.2 2.4 3.8 4.0
15.5 14.3 16.9 5.5
4.5 5.7 7.8 0.0
13.2 3.4 5.1 9.6
2
night
ZeroJudge E807 範例測資

解題思路

判斷每日總和的最大值,並將最大值的天數存起來並輸出。

宣告一個 Map<string, float>,Key 分別為「morning、afternoon、night、early morning」,將不同時段的降雨量分別加到這些 Key 中。之後跑一個 for (auto it:Map),預設一個 pair<string, float> ans 並將 ans.second 設為 -1。如果 it.second > ans.second,則 ans = it。最後輸出 ans.first 即可。

範例程式碼-ZeroJudge E807: 降雨量統計 (Rainfall statistics)

#include <iostream>
#include <map>
using namespace std;

int main() {
    cin.sync_with_stdio(0);
    cin.tie(0);
    float max = -1;
    int max_day;
    map<string, float>MAP;
    for (int i = 1; i<=7; i++)
    {
        float a, b, c, d;
        cin >> a >> b >> c >> d;
        float sum = a + b + c + d;
        if (sum > max)
        {
            max = sum;
            max_day = i;
        }
        MAP["morning"] += a;
        MAP["afternoon"] += b;
        MAP["night"] += c;
        MAP["early morning"] += d;
    }
    cout << max_day << "\n";
    pair<string, float>ans;
    ans.second = -1;
    for (auto it:MAP)
    {
        if (it.second > ans.second) ans = it;
    }
    cout << ans.first << "\n";
}

//ZeroJudge E807
//Dr. SeanXD

發佈留言