CCF-CSP认证 历年题目 自练Day6

CCF-CSP认证 历年题目 自练Day6(超详细题目分析)

试题编号: 201412-1
试题名称: 门禁系统
时间限制: 1.0s
内存限制: 256.0MB
问题描述:
问题描述
  涛涛最近要负责图书馆的管理工作,需要记录下每天读者的到访情况。每位读者有一个编号,每条记录用读者的编号来表示。给出读者的来访记录,请问每一条记录中的读者是第几次出现。
输入格式
  输入的第一行包含一个整数n,表示涛涛的记录条数。
  第二行包含n个整数,依次表示涛涛的记录中每位读者的编号。
输出格式
  输出一行,包含n个整数,由空格分隔,依次表示每条记录中的读者编号是第几次出现。
样例输入
5
1 2 1 1 3
样例输
1 1 2 3 1
评测用例规模与约定
  1≤n≤1,000,读者的编号为不超过n的正整数

题目分析(自己理解)

  1. 直接看输入第一行是n记录条数,后面第二行输入n个整数,直接n=int(input())
  2. 我还是把输入的记录用列表存储l=list(map(int,input().split(()))
  3. 第一种思路,先选择再存放,先判断是否存在记录,如果不存在,就放入容器然后计数器的值赋为1。
  4. 如果存在记录则直接加一即可。
  5. 关键点是,次数在变,但是编号不会变,而且输出要求把每次统计的总次数显示出来,并不是只显示最后统计的总出现次数。我用列表num专门存储计数器的每一次计数。
  6. 怎样存储 编号:次数 这样的数据呢?我选择用字典,字典的特点,关键字不变,值再次复制会用最后一个替代掉,刚好满足编号唯一的条件,且次数可以改变。这样我在记录非第一次出现的编号的时候可以直接在当前key的value值直接加一,然后记录到num中。
  7. 计数器num=[]专门用于存储编号的每一次的记录次数。只需最后输出num即可。
n=int(input())
l=list(map(int,input().split()))
di={}
num=[]
for i in range(n):
    if l[i] not in di:
        di[l[i]]=1#添加新键值对
    else:
        di[l[i]]+=1
    num+=[di[l[i]]]

for i in range(n):
    print(num[i],end=' ')
  1. 第二种方法:评测用例规模与约定
      1≤n≤1,000,读者的编号为不超过n的正整数
  2. 那就直接给1000个空间全部值设为0,用列表的位序代表编号,用元素的值代表出现的次数,输入的编号就是列表的位序,然后将元素的值加一即可!,每遍历一遍就输出一遍。从位序为1到1001
  3. 上代码:
n=int(input())
l=list(map(int,input().split()))
count=[0]*1001
for num in l:
	count[num]+=1
	print(count[num],end=' ')

CCF-CSP认证 历年题目 自练Day6_第1张图片
CCF-CSP认证 历年题目 自练Day6_第2张图片
![请添加图片描述](https://img-blog.csdnimg.cn/5cb41397118f4f7791b57b8927d93f6f.jpegCCF-CSP认证 历年题目 自练Day6_第3张图片
11.该死的蚊子!!!

你可能感兴趣的:(算法,数据结构,python)