題目敘述
題目採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);
}
留言
張貼留言