**如果看不懂可以在底下留言發問**
**試著看懂別人的程式碼也是一種學習^ ^**
[C_AR91-易] 直方圖
成績: 0 / 倒扣: 0.8
題目說明: 直方圖( histogram )為統計分析研究常用的視覺化呈現的工具,例如可以將學生考試的成績依 0-9 , 10-19 , ... , 90-100 分為第 0 , 1 , … , 9 級,並將出現在各級間分數計算次數並以 x 表示,即可顯現出學生考試的成績區間分佈。
輸入說明: 輸入不定個數之整數,每個整數代表一個學生成績,其中每個整數都大於等於0且小於等於100,且各數字間以一個空白隔開。
輸出說明: 將成績經過 histogram 計算並以小寫 x 的個數分級垂直呈現,分級數字列於最後一列。並且各級之間以一個空行隔開。
範例 :
輸入說明: 輸入不定個數之整數,每個整數代表一個學生成績,其中每個整數都大於等於0且小於等於100,且各數字間以一個空白隔開。
輸出說明: 將成績經過 histogram 計算並以小寫 x 的個數分級垂直呈現,分級數字列於最後一列。並且各級之間以一個空行隔開。
範例 :
Sample Input:
|
Sample Output:
|
0 71 54 41 37 54 77 47 63 54 58 58
40 45 43 56 40 35
|
x
x
x x x x x x x x x x x x x x x x 0 1 2 3 4 5 6 7 8 9 |
說明
1. 先用陣列計算每個級數的數量
2. 再來是輸出x,0和1中間有空白,1和2之間有空白,以此類推,9的右邊不用空白,而是換行。
我是一列一列輸出,如下黃色部分,0~9先不理他,只看x的部分。
首先要知道她有幾列,幾列取決於0~9中x的最大數量,最多的是4和5,有6個x。
程式碼34~62行
x
|
x
|
|||||||||||||||||
x
|
x
|
|||||||||||||||||
x
|
x
|
|||||||||||||||||
x
|
x
|
|||||||||||||||||
x
|
x
|
x
|
x
|
|||||||||||||||
x
|
x
|
x
|
x
|
x
|
x
|
|||||||||||||
0
|
1
|
2
|
3
|
4
|
5
|
6
|
7
|
8
|
9
|
3. x輸出完後,輸出0~9
- #include <iostream>
- #include <cmath> //floor()
- #include<algorithm> // fill()
- using namespace std;
- int main() {
- // [C_AR91-易] 直方圖
- int count[10]; //0~9的數量
- int max = -1;
- fill(count, count+10,0);
- //int result[][];
- int num;
- while(cin >> num)
- {
- if(num >= 0 && num < 100)
- {
- count[int(floor(num/10))]++;
- if(count[int(floor(num/10))] > max)
- {
- max = count[int(floor(num/10))];
- }
- }
- else if(num == 100)
- {
- count[9]++;
- if(count[9] > max)
- {
- max = count[9];
- }
- }
- }
- for(int i = max;i > 0;i--)
- {
- for(int j = 0;j < 10;j++)
- {
- if(j != 9)
- {
- if(count[j] >= i)
- {
- cout << "x ";
- }
- else
- {
- cout << " ";
- }
- }
- else
- {
- if(count[j] >= i)
- {
- cout << "x";
- }
- else
- {
- cout << " ";
- }
- }
- }
- cout << endl;
- }
- for(int i = 0;i < 10;i++)
- {
- if(i != 9)
- {
- cout << i << " ";
- }
- else
- {
- cout << i << endl;
- }
- }
- return 0;
- }
沒有留言:
張貼留言