众数和重数问题

问题描述

给定含有n个元素的多重集合S,每个元素在S中出现的次数叫做该元素的重数,多重数集S中重数最大的元素称为 众数
对于给定的S,求其众数和重数
输入数据由input.txt提供,第一行为S中元素个数n,接下来n行中每行有一个自然数
程序运行结束时,将计算结果输出到文件output.txt中,输出文件有两行,第一行是众数,第二行是重数

分析

思路是先求众数,可以用字典作为辅助。字典的键值key对应列表中元素的位置,字典的value对应各元素的频数。最后遍历获取频数最高元素并输出即可。

源代码

# 给定集合文件input.txt,求众数和众数出现的次数,并输出到output.txt

with open("input1.txt", mode='r') as f1:
    n = int(f1.readline())
    list1 = f1.read().splitlines()
    dic1 = {}

    # print(list1)
    max = 0     # 默认重数为第一个

    def countX(list, x):
        # 计算元素在列表中出现的次数
        return list.count(x)
    for i in range(n):
        # 格式化字典
        dic2 = {i: 0}
        dic1.update(dic2)
    for i in range(n):
        # 将实验数据录入字典
        dic1[i] = countX(list1, list1[i])

    for i in range(n):
        # 打印实验数据

        if dic1[i] >= dic1[max]:
            max = i
    # print("集合中的众数是{0}它的重数是:{1}".format(list1[max], dic1[max]))
    with open('output1.txt', mode='w+') as f2:
        f2.write(str(list1[max] + '\n' + str(dic1[max])))

输入输出文件

input1.txt
19
2
4
5
6
7
8
999
9
9
9
9
1
1
1
1
1
1
1
1
output1.txt
1
8

总结

这是一道简单的求众数题,只能起到练习的作用。但是有一个思想很重要,就是善用各种数据结构,能够大大降低算法的资源占用和理解难度。

发布了45 篇原创文章 · 获赞 8 · 访问量 9908
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章