每一族都有自己的图腾。
身为一名 OIer,我们的图腾有点不一样:
由字母构成的柱状图!具体来说,是以一段英文中字母的出现次数,来绘出对应数量的竖直星号 “∗" 所组成的图案。
第一行为一个整数 n,表示以下有 n 段英文。
接下来为 n 段只包含大写字母及标点符号、空格的英文。
输出格式见题意,注意不要有多余的空格。
4
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≤n≤10,每段英文长度不超过 1000 个字符
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
int main() {
int n;
cin >> n;
cin.ignore(); // 忽略输入流中的换行符
vector<int> freq(26, 0); // 初始化字母频率数组
// 读取每一段英文并统计字母出现次数
for (int i = 0; i < n; ++i) {
string line;
getline(cin, line); // 读取一行英文
for (char c : line) {
if (isalpha(c)) { // 检查字符是否为字母
freq[toupper(c) - 'A']++; // 将字母转换为大写并计数
}
}
}
// 找到出现次数最多的字母的频率
int max_freq = *max_element(freq.begin(), freq.end());
// 绘制柱状图
for (int i = max_freq; i > 0; --i) {
for (int j = 0; j < 26; ++j) {
if (freq[j] >= i) {
cout << "* ";
} else {
cout << " ";
}
}
cout << endl;
}
// 输出字母
for (char c = 'A'; c <= 'Z'; ++c) {
cout << c << " ";
}
cout << endl;
return 0;
}