7-1 字母统计图 (10 分)(思路+详解)
生活随笔
收集整理的這篇文章主要介紹了
7-1 字母统计图 (10 分)(思路+详解)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
一:題目
擺放在面前的是一小段英文文章。 afeng希望你能幫他統(tǒng)計一下每個小寫字母出現(xiàn)的次數(shù)。 最后再以柱狀圖的形式(參照輸出樣例)輸出出來。
輸入格式:
輸入第一行為一個正整數(shù)N(N<=100),表示文章的行數(shù)。 隨后為N行文本。
輸出格式:
由若干行組成,前幾行由空格和星號組成,最后一行則是由空格和字母組成的。格式嚴格參照樣例。
輸入樣例:
4 I never saw a Moor- I never saw the Sea- Yet know I how the Heather looks And what a Billow be.輸出樣例:
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * a b c d e f g h i j k l m n o p q r s t u v w x y z二:思路
1.如何處理我們的數(shù)據(jù),也就是統(tǒng)計每個字母的個數(shù);在這里我選取的是map容器
利用map的一對一特性,統(tǒng)計每個字母的個數(shù)
2.那么如何顯示出柱狀圖呢?首先我們將最大的字母個數(shù)求出來,利用for循環(huán)
那么我們就需要進行這么多次的輸出,我進行遞減輸出(i–),然后在范圍為26的for
循環(huán)當中判斷字母在map容器是否存在 存在的話就判斷 i小于等于某個字母的個數(shù)的時候,
接下來輸出 * 否則就輸出空格。如果map當中就無該字母也得輸出空格,具體的格式要求
可以在PTA上的測試用例當中進行調(diào)試。
三:上碼
/**思路: 1.如何處理我們的數(shù)據(jù),也就是統(tǒng)計每個字母的個數(shù);在這里我選取的是map容器利用map的一對一特性,統(tǒng)計每個字母的個數(shù)2.那么如何顯示出柱狀圖呢?首先我們將最大的字母個數(shù)求出來,利用for循環(huán)那么我們就需要進行這么多次的輸出,我進行遞減輸出(i--),當 i = 某個字母的個數(shù)的時候,接下來就每次都輸出 * */ #include<iostream>//輸入輸出 #include<map>//map容器 #include<algorithm>//sort函數(shù) #include<math.h>//max和min等數(shù)學函數(shù) using namespace std; int main(){map<char,int> m;map<char,int>:: iterator mt;char ch[26] = {'a','b','c','d', 'e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};int N;cin >> N;getchar();//讀取換行符 (當cin 和 getline 同時用的時候) for(int i = 0; i < N; i++) {string str;getline(cin,str);// cout << str << endl;for(int j = 0; j < str.size(); j++) {if(str[j] == ' ' || str[j] == '-' || str[j] == '.' || isupper(str[j]))//isupper(str[i])如果是大寫字母就跳過 continue; m[str[j]] += 1;//統(tǒng)計每個字母的個數(shù) } }int maxx = 0;for(mt = m.begin(); mt != m.end(); mt++) {maxx = max(maxx,mt->second);//cout << mt->first << ' ' << mt->second << endl;}for(int i = maxx; i >= 1; i--) { for(int j = 0; j < 26; j++) {int flag = 0;for(mt = m.begin(); mt != m.end(); mt++) {if(ch[j] == mt->first) {flag = 1;if(i <= mt->second)cout << "*";elsecout << " "; }} if(flag == 0){//如果并無該字母就輸出空格 cout << " ";}if(j != 25)cout << " ";//每個字母輸出完成后,無論是否該字母均需輸出空格 flag = 0;} cout << endl; }cout << ch[0]; for(int i = 1; i < 26; i++){cout << ' ' << ch[i];}}總結
以上是生活随笔為你收集整理的7-1 字母统计图 (10 分)(思路+详解)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PTA 数据结构与算法题目集(中文)
- 下一篇: 7-2 港口审查 (15 分)