CCF-CSP认证历年真题自练 Day3

CCF-CSP认证历年真题自练 Day3

试题编号: 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 20 30 20
样例输出
10

题目解析(自己的解题思路)

  1. 我的思维模式还是先看输入输出,这道题很简单(理解起来),知道要干什么,OK!让我们想想怎么办,输入的第一行只有一个正整数n(1 ≤ n ≤ 1000),表示数字的个数。那就直接n=int(input())
  2. 输入的第二行有n个整数s1, s2, …, sn (1 ≤ si ≤ 10000, 1 ≤ i ≤ n)。相邻的数用空格分隔。(看到这个条件我人都麻了,指定要用split()方法),现在想一下用什么容器装这些整数,我还是首先列表(其实字典对这道题是最友好的)试试,我直接 l=input().split()#注意split()方法返回的是列表。
  3. 好!现在我要统计列表中的同一种元素的个数,用Counter()函数去统计,好家伙,注意:Counter()函数返回的是字典类型。(害!绕到后面还是字典)counter=Counter(l)#按照例子:此时counter=Counter{‘10’:2,‘1’:1,‘20’:2,‘30’:1}#整数是key,次数是value。
  4. 问题来了,我现在用什么方法去实现当次数value相同时输出最小的整数key。那我优先key的大小,再去判断次数问题。那就先按照key由小到大进行排序,用sorted()函数去排序。定义一下新字典m_sor=sorted(counter.keys())
  5. 题目输出的是key最小且value最大的item的key。
    那就去遍历每一个item然后将次数最大的key输出即可,因为已经按照升序排序了,所以只要按照item[0]到item[n-1]找到次数最大的value即可。
    for i in m_sor:#按照item[0]到item[n-1]遍历。
    定义一个容器 f_key=0存放item的位序,再定义一个f_value存放最大的value,方便遍历时的比较和替换。
    if m[i]>f_value:
    f_key=i
    f_value=m[i] #m[i]是value
    print(f_key) #输出key
  6. 完整代码:
from collections import Counter
n=int(input())
l=input().split()
counter=Counter(l)
m_sor=sorted(counter.keys())#对字典的keys升序排序
m_sor=sorted(m.keys())#对字典的keys升序排序
f_key=0
f_value=0
for i in m_sor:
    if m[i]>f_value:
        f_key=i
        f_value=m[i]
print(f_key)

  1. 此种方法是将所有的数值放到容器里面,然后再根据题意重新排序。那我为什么不能按照所需放入容器呢?
  2. 第二种方法,我选择直接采用字典,m={}
  3. 只要用户输入一个m中不存在的key我就添加到m中,value设置初始值为1,输入一个存在的key那我就当前key对应的value+1,一直遍历完所有的输入(key),这个字典就是{整数1:次数,…,整数n:次数}
    的样子。 完整代码:

n=int(input())
m={}
#建立一个 {整数:次数} 的字典
for i in list(map(int,input().split())):
    if i in m.keys():
        m[i]+=1
    else:
        m[i]=1

m_sor=sorted(counter.keys())#对字典的keys升序排序
m_sor=sorted(m.keys())#对字典的keys升序排序
f_key=0
f_value=0
for i in m_sor:
    if m[i]>f_value:
        f_key=i
        f_value=m[i]
print(f_key)

总结

关于字典的各种操作:增删改,列表字典相互转换,以及一些关于字典的函数。 得加练。

欲哭无泪。我为啥有四颗长得特别齐的智齿。

CCF-CSP认证历年真题自练 Day3_第1张图片
CCF-CSP认证历年真题自练 Day3_第2张图片

CCF-CSP认证历年真题自练 Day3_第3张图片

你可能感兴趣的:(算法,python)