時間限制: 1000 ms 空間限制: 262144 KB 具體限制
題目描述
Johe最近玩起了字符遊戲,規則是這樣的:讀入四行字符串,其中的字母都是大寫的,Johe想打印一個柱狀圖顯示每個大寫字母的頻率。你能幫助他嗎?
輸入
輸入文件共有4行:每行爲一串字符,不超過100個字符。
輸出
與樣例的格式保持嚴格一致。
樣例輸入
THE QUICK BROWN FOX JUMPED OVER THE LAZY DOG. THIS IS AN EXAMPLE TO TEST FOR YOUR HISTOGRAM PROGRAM. HELLO!
樣例輸出
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 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.輸出的相鄰字符間有一個空格。
2.最後一行的26個大寫字母每次必須輸出。
3.大寫字母A所在的第一列前沒有空格。
題記:
用桶排序的思想,很簡單就能模擬出來~~思路如下:
26個字母,26個桶(letter[27]);
初始都爲0,根據輸入的字符,是第幾個字母,第幾個桶就加一(A算第一個字母);
找最大的字母數(max),確定行數;
共max行,26列,用兩個for循環輸出;
如果字母數大於等於(max-行數),則輸出“*”,否則輸出空格;
注意中間也有空格!(第33行的作用)
最後輸出26個字母。
C++程序如下:
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
int letter[27] = {0};
int main(){
int len, max=0;
string s;
//輸入四行字符串,並進行桶排序
for(int i=0; i<4; i++){
getline(cin ,s);
len = s.size();
for(int j=0; j<len; j++){
if(s[j]>='A' && s[j]<='Z')
letter[s[j]-'A'] ++;
}
}
//找最大字母數量,確定行數
for(int i=0; i<26; i++)
if(letter[i] > max)
max = letter[i];
//輸出
for(int i=0; i<max; i++){
for(int j=0; j<26; j++){
if(letter[j] >= (max-i))
cout << "*" ;
else
cout << " ";
cout << " ";
}
cout << endl;
}
cout << "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";
return 0;
}