7-15 生肖统计字典序输出。

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

  • 你可以看下这个问题的回答https://ask.csdn.net/questions/450094
  • 以下回答由chatgpt基于相关博客总结生成:

    问题:如何实现一个生肖统计程序?

    具体步骤:

    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()