CCF201312-1 出现次数最多的数(python)

试题编号 201312-1
试题名称 出现次数最多的数
时间限制 1.0s
内存限制 256.0MB
问题描述 问题描述 :给定n个正整数,找出它们中出现次数最多的数。如果这样的数有多<个,请输出其中最小的一个
输入格式:输入的第一行只有一个正整数n(1 ≤ n ≤ 1000),表示数字的个数。输入的第二行有n个整数s1, s2, …, sn (1 ≤ si ≤ 10000, 1 ≤ i ≤ n)。相邻的数用空格分隔。
输出格式:输出这n个次数中出现次数最多的数。如果这样的数有多个,输出其中最小的一个。
样例输入:6
10 1 10 2 30 20
样例输出:1

问题分析:

第一想到的是,利用字典来存储数字与个数,键为数字、值为个数;其次,题中相对困难的一点是"输出其中最小的一个",那就干脆给{数字:个数}按照数字大小降序排序;然后,遍历得出个数最多的那个数就行了。


代码:

cot = int(input()) # 个数
keyslst = input().split() # 键列表
ansdict = dict()  # 创建答案字典
for i in keyslst:
    if ansdict.get(i, False):  # 如果字典里不存在这个键,就返回False
        ansdict[i] += 1  # 存在,则值+1
    else:
        ansdict[i] = 1  # 不存在,则创建该键,对应值设为1
ansdict = sorted(ansdict.items(), key=lambda x: int(x[0]), reverse=False)#给字典逆排序,得到的是一个类似[(key1,value1),(key2,value2)...]列表
maxvalue = 0
ans = 0
lenth = len(ansdict)
for i in range(lenth):
    if ansdict[i][1] > maxvalue:
        maxvalue = ansdict[i][1]
        ans = int(ansdict[i][0])
print(ans)

你可能感兴趣的:(CCF刷题集)