从中间开始走输入8,生成九宫格,打印1-8的(x,y)坐标输入13,因为超过了9,所以生成16宫格,打印1-13的(x,y)坐标输入17,生成25宫格,打印1-17的(x,y坐标)
回型算法
按照题目要求编写的Python程序如下(注意源代码的缩进,见图)
count=1
x=50
y=50
m=int(input("请输入一个正整数:"))
for i in range(1,m):
if m>=i*i and m<=(i+1)*(i+1):
N=i+1
break
a=[[0 for j in range(N)] for i in range(N)]
if N%2==0:
n=int(N/2)
for i in range(n-1,-1,-1):
for j in range(N-i-2,i,-1):
a[i][j]=count
count+=1
for j in range(i,N-i):
a[j][i]=count
count+=1
k=N-i-1;
for j in range(i+1,N-i):
a[k][j]=count
count+=1
for j in range(N-i-2,i-1,-1):
a[j][k]=count
count+=1
else:
n=int(N/2)+1
for i in range(n-1,-1,-1):
k=N-i-1;
for j in range(i+1,N-i):
a[k][j]=count
count+=1
for j in range(N-i-2,i-1,-1):
a[j][k]=count
count+=1
for j in range(N-i-2,i,-1):
a[i][j]=count
count+=1
for j in range(i,N-i):
a[j][i]=count
count+=1
for i in range(0,N):
for j in range(0,N):
if a[i][j]<=m:
print("%d(%d,%d) "%(a[i][j],y+(j-n+1)*50,x-(i-n+1)*50),end='')
else:
print(f"%{N+5}s"%" ",end='')
print()