python——旋转魔方阵(文件)

【问题描述】
输入一个自然数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")
  • 13
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值