时间限制: 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;
}