螺旋方阵的奥秘 Python

对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
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值