問題描述
給定含有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
總結
這是一道簡單的求衆數題,只能起到練習的作用。但是有一個思想很重要,就是善用各種數據結構,能夠大大降低算法的資源佔用和理解難度。