21462: 加密的称赞
http://cs101.openjudge.cn/practice/21462/
圣诞将至,小翔想写一段话给小叶,为了体现他的别出心裁,他想运用在计概中所学知识,对这段话进 行加密。具体方法如下:
- 小翔首先想出自己想说的话:You are so beautiful!
- 然后把每个字符按照顺序,以逆时针转圈的方式填入一个n阶方阵(即一个n*n的矩阵),如下图
1所示
- 最后把相应的字符转化为ASCII码,没有字符的地方用0表示,如下图2所示。

输入
第一行为n(n≤100),表示这个方阵的阶数。接下来有行,每一行n个整数,表示字符的ASCII码
输出
一行,即小翔本来想说的话
样例输入
sample1 in
3
104 101 109
97 0 111
110 100 115
sample1 out
handsome样例输出
sample2 in
5
89 116 117 97 101
111 105 0 0 98
117 102 0 0 32
32 117 108 33 111
97 114 101 32 115
sample2 out
You are so beautiful!提示
在openjudge中print(chr(0))是有输出的,是ASCII码为0对应的字符,本题中0表示没有输出。
来源
cs101 2020 Final Exam v0.2
这是必会的题目,涉及到加密、ASCII、旋转矩阵。虽然今年不见得还有类似题目。
python
n = int(input())
s = [[-1]*(n+2)]
mx = s + [[-1]+ [int(x) for x in input().split()]+[-1] for _ in range(n)] + s
row = 1
col = 1
dirL = [[1,0], [0,1], [-1,0], [0,-1]]
N = 0
drow, dcol = dirL[0]
for _ in range(1, n*n+1):
if mx[row][col]!=0:
print(chr(mx[row][col]), end='')
mx[row][col] = -1
if mx[row+drow][col+dcol]==-1:
N += 1
drow, dcol = dirL[N%4]
row += drow
col += dcol