洛谷 P1598 垂直柱状图 题解

糸见纱希

本题解最初发布于洛谷个人博客。链接:https://www.luogu.com.cn/blog/guopc/p1598

Python 3

题目链接

好像没看到有人写 Python 3 的题解,本蒟蒻就来献丑了。

模拟,嗯。主要用到列表和字典。

直接上代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
letters = [chr(i) for i in range(65, 91)] # 创建字符 A~Z 的列表
staDic = dict(zip(letters, [0] * 26)) # 以字母为键创建统计每个字母出现次数的字典
ins = [j for i in range(4) for j in input()] # 读入输入,同时将输入拆成单个字符存入列表
for k in ins:
if k in letters:
staDic[k] += 1 # 遍历输入的每一个字符,过滤出 A~Z,同时统计出现次数
maxValue = max(staDic.values()) # 获取最大出现次数
ZDic = {'Z': staDic.pop('Z')} # 将 Z 的键值对拿出来用于单独处理,此时统计字典 staDic 里只有 A~Y 的键值对了
while maxValue > 0:
# 这里考虑的是,因为题目要求的“柱状图”是底部对齐的,所以应当将值从大到小层层过滤。
# 没理解的话可以照着输出样例,在左侧从底部往上标注 1、2、3、…(也就是手动加个纵轴)。现在就是从顶部向下进行输出
for value in staDic.values(): # 遍历统计字典里(现在只有 A~Y)的各值
if value >= maxValue:
print('*', end=' ') # 对应的键能达到这个出现次数,输出 * 加个空格
else:
print(' ', end=' ') # 对应的键达不到这个出现次数,输出 2 个空格
if ZDic['Z'] >= maxValue: # 单独处理 Z,因为 Z 后面就要换行了嘛
print('*')
else:
print(' ')
maxValue -= 1 # 一行输出完之后出现次数自减,到下一行进行输出(继续循环)
print(' '.join(letters)) # 输出横轴

语言表达苦手qwq,如果能看懂我写的注释的话那再好不过了(

目录
洛谷 P1598 垂直柱状图 题解