CCF201412-Python题解
门禁系统
原题链接:http://118.190.20.162/view.page?gpid=T21
试题编号: | 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的正整数。
|
题解:多学点python基础,对于每加入到列表中的元素,都可适用list的自带方法计数
1 n = int(input()) 2 a = list(map(int, input().split())) 3 t = [] 4 for i in a: 5 t.append(i) 6 print(t.count(i), end = " ")
Z字形扫描
原题链接:http://118.190.20.162/view.page?gpid=T20
试题编号: | 201412-2 |
试题名称: | Z字形扫描 |
时间限制: | 2.0s |
内存限制: | 256.0MB |
问题描述: |
问题描述
在图像编码的算法中,需要将一个给定的方形矩阵进行Z字形扫描(Zigzag Scan)。给定一个n×n的矩阵,Z字形扫描的过程如下图所示:
对于下面的4×4的矩阵, 1 5 3 9 3 7 5 6 9 4 6 4 7 3 1 3 对其进行Z字形扫描后得到长度为16的序列: 1 5 3 9 7 3 9 5 4 7 3 6 6 4 1 3 请实现一个Z字形扫描的程序,给定一个n×n的矩阵,输出对这个矩阵进行Z字形扫描的结果。 输入格式
输入的第一行包含一个整数n,表示矩阵的大小。
输入的第二行到第n+1行每行包含n个正整数,由空格分隔,表示给定的矩阵。 输出格式
输出一行,包含n×n个整数,由空格分隔,表示输入的矩阵经过Z字形扫描后的结果。
样例输入
4
1 5 3 9 3 7 5 6 9 4 6 4 7 3 1 3 样例输出
1 5 3 9 7 3 9 5 4 7 3 6 6 4 1 3
评测用例规模与约定
1≤n≤500,矩阵元素为不超过1000的正整数。
|
题解:根据位置变换得特点,可以分为奇偶两大类
00 01 02 03
10 11 12 13
20 21 22 23
30 31 32 33
四个边缘部分,需要注意一下,判断还是可以更简单写的(折叠部分,不过没那么直观)
偶数时,注意了上边缘和右边缘
奇数时,注意了下边缘和左边缘
1 n=int(input()) 2 a=[list(map(int, input().split())) for _ in range(n)] 3 4 i=0 5 j=0 6 while i<n and j<n: 7 print(a[i][j], end=' ') 8 if (i+j)%2==0: 9 if i==0 and j!=n-1: 10 j+=1 11 elif j==n-1: 12 i+=1 13 elif i>=0: 14 i-=1 15 j+=1 16 elif (i+j)%2==1: 17 if j==0 and i!=n-1: 18 i+=1 19 elif i==n-1: 20 j+=1 21 elif j>=0: 22 i+=1 23 j-=1
简洁版
1 from sys import stdin 2 3 n=int(stdin.readline()) 4 arr=[list(map(int, stdin.readline().strip().split())) for _ in range(n)] 5 6 i,j=0,0 7 while i<n and j<n: 8 # print(i,j) 9 print(arr[i][j],end=" ") 10 if (i+j)%2==0: 11 if j==n-1: 12 i+=1 13 elif i==0: 14 j+=1 15 else: 16 i-=1 17 j+=1 18 else: 19 if i==n-1: 20 j+=1 21 elif j==0: 22 i+=1 23 else: 24 i+=1 25 j-=1 26 print()