本题要求你输出一个尺寸为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])
来源:https://www.cnblogs.com/endevelop-gw/p/12393990.html