北航OJ 转圈圈问题

房东的猫 提交于 2020-03-02 10:16:27

本题要求你输出一个尺寸为d×d的数阵,数字的排列方式是从1到n循环且顺时针转圈,看样例输出。
输入
两行,第一行是正整数n(n<10),第二行是正整数d(d<20)
 
输出
转圈圈的数阵
 
输入样例1
6
4
输出样例1
1 2 3 4
6 1 2 5
5 4 3 6
4 3 2 1
 
输入样例2
5
5
输出样例2
1 2 3 4 5
1 2 3 4 1
5 4 5 5 2
4 3 2 1 3
3 2 1 5 4

循环可以通过对数取模得到。矩阵可以用二维数组模拟。
麻烦在于模拟人转圈写数的过程,可以将每一圈看作一个循环。用一个变量n来标记写数的次数,当写数次数用尽时,循环结束。
奇数的情况下,正中间的最后一个数会出现问题,可以在最后加一个if语句进行完善。
这里用python实现。

a=int(input())
b=int(input())
c=[]
n=b**2
x=b
t=1
line=x
# 生成n*n维数组
for i in range(b):
    c.append([])
for i in range(b):
    for j in range(b):
        c[i].append(0)
while n:
    for j in range(2*x-b-1):
        c[b-x][j+b-x]=t
        n-=1
        t+=1
    for j in range(2*x-b-1):
        c[j+b-x][x-1]=t
        n-=1
        t+=1
    for j in range(2*x-b-1):
        c[x-1][x-1-j]=t
        n-=1
        t+=1
    for j in range(2*x-b-1):
        c[x-j-1][b-x]=t
        n-=1
        t+=1
    x-=1
    if b%2!=0 and n==1:
        c[int((b-1)/2)][int((b-1)/2)]=b**2
        n-=1
for i in range(b):
    for j in range(b):
        c[i][j]=str((c[i][j]-1)%a+1)
for i in range(b):
    c[i]=' '.join(c[i])
    print(c[i])
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!