一個新成立的網拍網站需要一個檢閱商品評價的系統,評價分為五個等級由 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