对Openjudge题目的思考(Python版本) ,题目如下
描述
我们可以通过电脑构造一个螺旋方阵
例如,一个边长为5的螺旋方阵样子如下
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
输入
一个数字N,与一个数字M(N<30,M<900)
输出
M在N*N的螺旋方阵中的行列数
样例输入
5 19
样例输出
2 4
我的做法主要是
1. 用列表下标代替了数字
2. x和y减一代表空行/空列数减一
3. 通过判断(是否为最大/最小数 或 是否已在列表之中) 进行方向转换
z,m=map(int,input('输入n和m:').split())
lt=[[0]]*(z**2)
x=z #行数
y=z #列数
ct=0 #计数器
while ct<len(lt):
if x==z: #第一轮
for i in range(1,y+1):
lt[ct]=[1,i]
ct += 1
x-=1
elif x<y:
u = lt[ct - 1][0]
t = lt[ct - 1][1]
for i in range(1,x+1):
if u==z or [u+i,t] in lt: #方向转换
i*=-1
lt[ct