一、题目:
雍正皇帝不能忍受任何人说清朝或者他坏话,以至于他大兴文字狱。因此老百姓书写任何东西都得很小心。诗人写诗也得担心。一些诗人发明了一种奇怪写诗方法,只有TA们朋友圈的人才能看懂。这样的诗统称为藏头诗。
一首藏头诗,是一个N×N 的字符矩阵,看起来杂乱无章没啥意思。但是,如果你用特定的顺序读这些字符,你就能看懂。正确的阅读顺序如下面左图所示:
顺着箭头读,你会看到“THISISAVERYGOODPOEMITHINK”,这就有点意思了。
过了一段时间后,诗人们发现,雍正的杀手,血滴子,也学会了读这样的诗。这很危险。所以诗人们发明了新的写诗顺序,如上面右图所示。
诗人想把所有的老写法的诗,都转成新写法的诗歌。请你帮助TA们。
输入
一共不超过10组数据。
在每组数据里:
第一行是一个整数N ( 1 <= N <= 100), 表明诗是一个N×N 的字符矩阵,仅包含大写字母。
接下来是N行。每行是一个N个字符的字符串。这N行表示一首老写法的诗。
输出
对每组数据,输出新写法的诗。
样例输入
5 THSAD IIVOP SEOOH RGETI YMINK 2 AB CD 4 ABCD EFGH IJKL MNOP
样例输出
THISI POEMS DNKIA OIHTV OGYRE AB DC ABEI KHLF NPOC MJGD
二、解析:
首先读取方式是一个Z字型遍历读取,然后用回型输出,我在解决Z字形遍历时选择以对角线为分界,对角线以上包括(对角线)为一部分用一个for循环遍历读取,以下再用一个for循环遍历读取。然后关于输出,我采用的是暴力遍历,先创建一个NxN的二维列表,然后逐一与之前Z字型遍历读取的列表对应。代码如下:
- n = int(input())
- lst = []
- for i in range(n):
- lst.append(input())
- lst1 = []
- flag = 1
- for i in range(n):
- r = 0
- for j in range(i,-1,-1):#添加上半部分
- if flag % 2==0 or flag==1:
- lst1.append(lst[r][j])
-
- if flag % 2 !=0 and flag != 1:
- lst1.append(lst[j][r])
- r+=1
- flag+=1
- if i == n-1:#添加下半部分
- if flag % 2 == 0:
- flag = 2
- else:
- flag = 1
- m = 1
- for k in range(1,n):
- m = k
- for c in range(n-1,k-1,-1):
- if flag %2 == 0:
- lst1.append(lst[m][c])
- else:
- lst1.append(lst[c][m])
- m+=1
- flag +=1
- lst2 = [[0 for i in range(n) ]for j in range(n)]#输出的二维列表
- I,J = 0,0
- C = 0
- while C < n*n:
- while J < n and lst2[I][J]==0:
- lst2[I][J] = lst1[C]
- C+=1
- J+=1
- J-=1
- I+=1
- while I < n and lst2[I][J]==0:
- lst2[I][J] = lst1[C]
- C+=1
- I+=1
- I-=1
- J-=1
- while J >= 0 and lst2[I][J]==0:
- lst2[I][J] = lst1[C]
- J-=1
- C+=1
- J +=1
- I -=1
-
- while I >= 0 and lst2[I][J]==0:
- lst2[I][J] = lst1[C]
- I-=1
- C+=1
- I+=1
- J+=1
- for i in range(n):
- for j in range(n):
- print(lst2[i][j],end = "")
- print("")
三、运行结果:
初学者,许多地方不够规范,请大家见谅~~