csp考试201312-1出现次数最多的数
问题描述:
问题描述
给定n个正整数,找出它们中出现次数最多的数。如果这样的数有多个,请输出其中最小的一个。
输入格式
输入的第一行只有一个正整数n(1 ≤ n ≤ 1000),表示数字的个数。
输入的第二行有n个整数s1, s2, …, sn (1 ≤ si ≤ 10000, 1 ≤ i ≤ n)。相邻的数用空格分隔。
输出格式
输出这n个次数中出现次数最多的数。如果这样的数有多个,输出其中最小的一个。
样例输入
6
10 1 10 20 30 20
样例输出
10
本人用python 3.0编程如下:
a = eval(input())
b = input().split(' ')
c = [eval(b[i]) for i in range(a)]
d = {}
for i in c:
d[i] = d.get(i,0) + 1
ls = list(d.items())
ls.sort(key=lambda x:x[1],reverse=True)
print(ls[0][0])
但是提交之后显示错误,只有70分,想知道这个错误出在哪里,谢谢~
答
这么输看看
6
2 2 2 1 1 1
你只排了个数大小,但没排数字大小
应该这样
ls.sort(key=lambda x:(x[1], -x[0]),reverse=True)
答
这是你的代码的运行结果,你看到了吧,没有满足输出其中最小的一个.
a = eval(input())
b = input().split(' ')
c = [eval(b[i]) for i in range(a)]
d = {}
for i in c:
d[i] = d.get(i, 0) + 1
ls = list(d.items())
ls.sort(key=lambda x: x[1], reverse=True) # 你这个排序只是找到了最多的元素,你还要去判断一下,这个最多的元素有几个.然后将前面几个再排序一次
maxVal = ls[0][1] # 最多次数
lsLast = [x for x in ls if x[1] == maxVal]
# 然后找到lsLast里面值最小的
lsLast.sort(key=lambda x:x[0])
print(lsLast[0][0])
结果: