ZeroJudge A866: Product Review Site

題目敘述

題目採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);
}

留言