Problem Description
方阵的主对角线之上称为“上三角”。
请你设计一个用于填充n阶方阵的上三角区域的程序。填充的规则是:使用1,2,3….的自然数列,从左上角开始,按照顺时针方向螺旋填充。
Input
程序运行时,从标准输入获得整数n(3~20)
Output
程序输出:方阵的上三角部分。
要求格式:每个数据宽度为4,右对齐。
Sample Input
3 4 5
Sample Output
1 2 3 6 4 5 1 2 3 4 9 10 5 8 6 7 1 2 3 4 5 12 13 14 6 11 15 7 10 8 9
def print_row(start_row, start_col, length, matrix_list, start):
for i in range(length):
matrix_list[start_row][start_col] = start
start += 1
start_col += 1
return length-1, start, start_row, start_col
def print_tilt(start_row, start_col, length, matrix_list, start):
for i in range(length):
matrix_list[start_row][start_col] = start
start += 1
start_row += 1
start_col -= 1
return length-1, start, start_row, start_col
def print_col(start_row, start_col, length, matrix_list, start):
for i in range(length):
matrix_list[start_row][start_col] = start
start += 1
start_row -= 1
return length-1, start, start_row, start_col
def print_pattern(n):
matrix_list = [[0 for i in range(n)] for i in range(n)]
start_row = -1
start_col = -1
start = 1
length = n
while n:
n, start, start_row, start_col = print_row(start_row+1, start_col+1, n, matrix_list, start)
if n:
n, start, start_row, start_col = print_tilt(start_row+1, start_col-2, n, matrix_list, start)
if n:
n, start, start_row, start_col = print_col(start_row-2, start_col+1, n, matrix_list, start)
for i in matrix_list:
for j in i:
if j != 0:
print('%4d' % j, end=' ')
print()
print()
print_pattern(5)