7-15 生肖统计
分数 10
作者 黄龙军
单位 绍兴文理学院
春节至,亲朋好友聚会忙,聚会之人有时会说到自己的生肖。对于给定的若干人的生肖,请统计各种生肖的人数,并按人数从多到小输出各种出现的生肖及其人数。若有多种生肖的人数相同,则按生肖英文单词(详见最后的提示)的字典序输出。
输入格式:
首先输入一个正整数T,表示测试数据的组数,然后是T组测试数据。每组测试先输入1个整数n(1<=n<=100)表示聚会人数,再输入n个字符串(长度不超过7且仅包含小写字母),每个字符串表示一个人的生肖。
输出格式:
对于每组测试,按描述要求输出结果,每种出现的生肖及其人数占一行,每行的两个数据之间以一个空格间隔。每两组测试数据之间留一个空行。
输入样例:
2
4
tiger
rabbit
dragon
rabbit
5
tiger
rabbit
dragon
rabbit
dragon
输出样例:
rabbit 2
dragon 1
tiger 1
dragon 2
rabbit 2
tiger 1
提示:
鼠、牛、虎、兔、龙、蛇、马、羊、猴、鸡、狗、猪等十二生肖相应的英文单词如下:
rat、ox、tiger、rabbit、dragon、snake、horse、goat、monkey、rooster、dog、pig
问题:如何实现一个生肖统计程序?
具体步骤:
1.首先读入测试数据的组数T
2.接下来依次读入每组测试数据
3.读入该组数据的人数n,以及n个字符串,表示每个人的生肖
4.使用字典进行人数统计
5.按照生肖英文单词的字典序从前往后以及人数从高到低的顺序排序,输出结果
6.每输出一组数据后,换行
代码实现:
# 定义字典,存储每个生肖出现的次数
shengxiao_dict = {'鼠': 0, '牛': 0, '虎': 0, '兔': 0, '龙': 0, '蛇': 0, '马': 0, '羊': 0, '猴': 0, '鸡': 0, '狗': 0, '猪': 0}
# 读入测试数据的组数T
T = int(input())
# 共T组数据
for i in range(T):
# 定义一个列表,存储每个生肖
shengxiaos = []
# 读入该组数据的人数n
n = int(input())
# 依次读入n个字符串,表示每个人的生肖
for j in range(n):
shengxiao = input()
shengxiaos.append(shengxiao)
# 使用字典进行人数统计
for shengxiao in shengxiaos:
shengxiao_dict[shengxiao] += 1
# 按照生肖英文单词的字典序从前往后以及人数从高到低的顺序排序,输出结果
sorted_shengxiao = sorted(shengxiao_dict.items(), key=lambda x: (-x[1], x[0]))
for shengxiao in sorted_shengxiao:
if shengxiao[1] != 0:
print(shengxiao[0], shengxiao[1])
# 每输出一组数据后,换行
if i != T - 1:
print()
更好的解答看这里:
shengxiao_dict = {
'rat': '鼠',
'ox': '牛',
'tiger': '虎',
'rabbit': '兔',
'dragon': '龙',
'snake': '蛇',
'horse': '马',
'sheep': '羊',
'monkey': '猴',
'rooster': '鸡',
'dog': '狗',
'pig': '猪'
}
def post_data():
import heapq
from collections import Counter
n = int(input())
c = Counter([shengxiao_dict[i] for i in input().split()])
c = [(-num, birth) for birth, num in c.items()]
heapq.heapify(c)
for _ in range(n):
print(heapq.heappop(c)[1], - heapq.heappop(c)[0])
print(heapq.heappop(c)[1], - heapq.heappop(c)[0])
print(heapq.heappop(c)[1], - heapq.heappop(c)[0])
heapq.heappush(c, (-1, '#'))
if __name__ == '__main__':
import sys
if sys.stdin.isatty():
for inputs, ans in test_data:
outputs = runner(post_data, inputs)
assert outputs == ans, f"{outputs=} {ans=} {inputs=}"
else:
post_data()