求助,全wa(玄关)
  • 板块学术版
  • 楼主DDab
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/1/21 22:07
  • 上次更新2024/1/22 10:26:59
查看原帖
求助,全wa(玄关)
1025095
DDab楼主2024/1/21 22:07

图腾

题目描述

每一族都有自己的图腾。

身为一名 OIerOIer,我们的图腾有点不一样:

由字母构成的柱状图!具体来说,是以一段英文中字母的出现次数,来绘出对应数量的竖直星号 “∗"“*" 所组成的图案。

输入格式

第一行为一个整数 nn,表示以下有 nn 段英文。

接下来为 nn 段只包含大写字母及标点符号、空格的英文。

输出格式

输出格式见题意,注意不要有多余的空格。

样例 #1

样例输入 #1

4
THE QUICK BROWN FOX JUMPED OVER THE LAZY DOG.
THIS IS AN EXAMPLE TO TEST FOR YOUR
HISTOGRAM PROGRAM.
HELLO!

样例输出 #1

*
                            *
        *                   *
        *                   *     *   *
        *                   *     *   *
*       *     *             *     *   *
*       *     * *     * *   *     * * *
*       *   * * *     * *   * *   * * * *
*     * * * * * *     * * * * *   * * * *     * *
* * * * * * * * * * * * * * * * * * * * * * * * * *
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≤101≤n≤10,每段英文长度不超过 10001000 个字符

#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;
}

2024/1/21 22:07
加载中...