【问题描述】
输入一个自然数N(2到9之间),要求输出如下的魔方阵,即边长为NN,元素取值为1至NN,1在左上角,呈顺时针方向依次放置各元素。
N=3时:
1 2 3
8 9 4
7 6 5
【输入形式】
从标准输入读取一个整数N。
【输出形式】
将结果输出到文件文件file.out。输出符合要求的方阵,每个数字占5个字符宽度,向右对齐,在每一行末均输出一个回车符。
【输入样例】
4
【输出样例】输出文件file.out内容为:
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
【评分标准】
本题不准使用数学库函数。结果正确得20分,每个测试点4分。
【提示】
print函数的格式化控制串可用来控制每个数字的占位宽度。以下输出写法使67占5个字符宽度。
print("%5d"%(67))
n = int(input())
a = []
b = [0]*n
for j in range(n):#创建n*n阶矩阵
a.append(b[:])
s = n*n#魔方阵最大的数值
c = 1#放入数组的值
x , y = 0 , 0
while c <= s:
for i in range(n):#向右
a[y][x] = c
c += 1
x += 1
x -= 1
n -= 1#经过第一个for循环之后少掉了一行
y += 1
for r in range(n):#向下
a[y][x] = c
c += 1
y += 1
y -= 1
x -= 1#经过第二个循环少掉了一列
for l in range(n):#向左
a[y][x] = c
x -= 1
c += 1
x += 1
n -= 1#经过第三个循环减少了一行
y -= 1
for k in range(n):#向上
a[y][x] = c
y -= 1
c += 1
y += 1
x += 1
with open("file.out", "w") as file:
for p in a:
for f in p:
file.write("%5d"%f)
file.write("\n")