ZeroJudge A866: Product Review Site

一個新成立的網拍網站需要一個檢閱商品評價的系統,評價分為五個等級由 1~5 表示,當使用者搜尋該商品時系統必須展示出該商品的歷史紀錄,歷史紀錄包含所有等級的評價次數、長條圖以及平均評價等級,請寫一個程式協助這個網站。

範例測資

範例輸入範例輸出
EOF 輸入,每筆測資為一個商品的歷史評價,每行包含一個評價 (1 ~ 5 的整數),以 0 做結尾輸出共六行,分別為評價等級 5 ~ 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
5 ( 4) |====
4 (11) |===========
3 (14) |==============
2 ( 6) |======
1 ( 2) |==
Average rating: 3.2432

解題思路

可以使用 Map 來存放資料,輸出平均值的部份可以用 printf 的方式來做只到第四位的輸出。

範例程式碼-ZeroJudge A866: Product Review Site

#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);
}

//ZeroJudge A866
//Dr. SeanXD

發佈留言