流星幢 2023-05-11 18:44 采纳率: 0%
浏览 428

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

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-05-11 20:23
    关注
    • 你可以看下这个问题的回答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()
      
    评论

报告相同问题?

问题事件

  • 创建了问题 5月11日