ccf题解 201412-2 Z字形扫描 python (找规律的思路)
前言:博主表示这个题真得太费脑筋啦!因为是业余时间练习,所以遇到这种一时半会想不到好思路的题,就容易懈怠,好像将近半月没有做题了,好难啊!但是博主最终还是挺了过来,个人比较喜欢一位博主所用的改变方向的思路,我这个到有点小朋友了…如果有不对的地方,欢迎大家指出!
问题描述:暂略,有时间会搬过来哒!
题目分析:
大家看原题就能看出具体的扫描走向,首先把每一行当做一个列表,存储到一个大列表b中,这样每个元素可以用b[i][j]来表示.我来贴张图:
代码思路:
首先把每行的数(一个小列表)存入一个大列表,思路如上图,有两个需要注意的地方,一个外层循环的k(代码中是i)分偶数和奇数,另外就是分小于n和不大于n!
n=int(input()) #输入n行
b=[] #存储所有的数
for i in range(n):
b.append(list(map(int,input().split())))
c=[] #按打印顺序存储数
for i in range(n*2-1): #外层循环
if i<n: #小于n时,每列个数为i
for j in range(i+1):
if i % 2 == 0: #i为偶数时行位置顺序大小倒序
c.append(b[i - j][j]) #行列位置和为外层循环的值i
else: #i为奇数时行位置顺序大小正序
c.append(b[j][i - j])
else: #大于等于n时,每列个数为(n*2-1-i)
for j in range(n*2-1-i):
if i%2==0:
c.append(b[n-j-1][j+i-n+1])
else:
c.append(b[j+i-n+1][n-j-1])
print(' '.join(map(str,c)))
样例
输入:
5
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
21 22 23 24 25
输出:
1 2 6 11 7 3 4 8 12 16 21 17 13 9 5 10 14 18 22 23 19 15 20 24 25