Skip to content

21462: 加密的称赞

http://cs101.openjudge.cn/practice/21462/

圣诞将至,小翔想写一段话给小叶,为了体现他的别出心裁,他想运用在计概中所学知识,对这段话进 行加密。具体方法如下:

  1. 小翔首先想出自己想说的话:You are so beautiful!
  2. 然后把每个字符按照顺序,以逆时针转圈的方式填入一个n阶方阵(即一个n*n的矩阵),如下图

1所示

  1. 最后把相应的字符转化为ASCII码,没有字符的地方用0表示,如下图2所示。

img

输入

第一行为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