題目敘述
題目採EOF方式收資料,每筆資料只有一個正整數代表顧客評了幾顆星。要求輸出每個星級的數量和該星級的長條圖 (格式請見範例輸出),最後輸出平均值,小數點四捨五入到第四位。
範例輸入 #1
4
5
3
4
2
4
3
5
2
1
3
2
4
3
2
4
3
3
2
4
3
3
5
3
1
4
3
2
4
5
4
3
4
3
3
4
3
0
範例輸出 #1
5 ( 4) |====
4 (11) |===========
3 (14) |==============
2 ( 6) |======
1 ( 2) |==
Average rating: 3.2432
解題思路
可以使用MAP來存放資料,輸出平均值的部份可以用printf的方式來做只到第四位的輸出。
解題程式碼如下 (僅供參考):
#include <iostream>
#include <stdio.h>
#include <map>
using namespace std;
int main() {
    int N, count = 0;
    double sum = 0;
    map<int, int>MAP;
    while (cin >> N && N != 0)
    {
        MAP[N]++;
        sum += double(N);
        count++;
    }
    map<int, string>result;
    int maxLen = -999;
    double avg = sum / double(count);
    for (int i = 5; i>0; i--)
    {
        result[i] = to_string(MAP[i]);
        int len = result[i].length();
        if (len > maxLen) maxLen = len;
    }
    for (int i = 5; i>0; i--)
    {
        cout << i << " (";
        for (int j = result[i].length(); j<maxLen; j++)
        {
            cout << " ";
        }
        cout << MAP[i] << ") |";
        for (int j = 0; j<MAP[i]; j++)
        {
            cout << "=";
        }
        cout << "\n";
    }
    printf("Average rating: %.4f\n", avg);
}
留言
張貼留言