Python入门习题(12)——CCF CSP认证考试真题:门禁系统
程序员文章站
2022-04-02 09:30:30
...
问题描述
试题编号: 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的正整数。
解题思路
- n个整数按输入顺序依次登记它们的出现次数。用一个数组array来登记出现次数,数组的长度是n+1,整数k的出现次数保存在array[k]中。数组array的n+1个元素的初值是0。
- 登记到整数k时,要做的是:array[k] = array[k] + 1 ,并输出array[k]的值。
参考答案
num = int(input())
ns = [int(s) for s in input().split()] #列表推导式
count_list = [0] * 1001 #这里用1001,比用1000更好,下面的代码更简洁。
for n in ns: #依次登记整数的出现次数
count_list[n] += 1 #出现次数加1
print(count_list[n], end=' ')
小结
- 解答本题的关键点是,想到“用一个数组array来登记出现次数,数组的长度是n+1,整数k的出现次数保存在array[k]中。”
- 约定“整数k的出现次数保存在array[k]中”的做法的前提是,读者的编号为不超过n的正整数。“评测用例规模与约定”一栏中叙述的内容表明满足这一前提。
- 如果“读者的编号为不超过n的正整数”这一前提不满足,那么可以使用Python的字典来存储各个整数的出现次数。
- “count_list = [0] * 1001”,用1001,不用1000的理由是: 这使得整数k的出现次数存储在array[k]内,而不是array[k-1]内。例如,整数1000的出现次数存储在array[1000]内,而不是array[999]内。
- 语句"count_list = [0] * 1001"中,把1001换成num+1也是可以的,num是整数的个数。
推荐阅读
-
Python入门100道习题(9)——CCF CSP认证考试真题:出现次数最多的数
-
Python入门习题(14)——CCF CSP认证考试真题:数列分段
-
Python入门习题(18)——CCF CSP认证考试真题:中间数
-
Python入门习题(10)——CCF CSP认证考试真题:相反数
-
Python入门习题(20)——CCF CSP认证考试真题:打酱油
-
Python入门习题(17)——CCF CSP认证考试真题:最大波动
-
Python入门习题(23)——CCF CSP认证考试真题:卖菜
-
Python入门习题(29)——CCF CSP认证考试真题:窗口
-
Python入门习题(24)——CCF CSP认证考试真题:小明上学
-
Python入门习题(21)——CCF CSP认证考试真题:最小差值