衆數和重數問題

問題描述

給定含有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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章