Python学习之绕圈圈题

最近在学习Python,遇到了如下题目:

给定4应该输出如下形式的数据
01  12  11  10
02  13  16  09
03  14  15  08
04  05  06  07

给定5,应该输出如下形式的数据
01  16  15  14  13
02  17  24  23  12
03  18  25  22  11
04  19  20  21  10
05  06  07  08  09

观察上面的矩阵不难看出,数字总是从第一个开始成螺旋状排列指导最中心,我称它为“螺旋矩阵”

找关键点

根据上图可以发现如下规律:

(1)位于1号线的行索引与列索引之和为 n-1

(2)位于2号线的行索引等于列索引

(3)位于3号线的行索引等于列索引-1

于是可以如下编码:

#!/usr/bin/python3

"""
实现数字绕圈圈功能
"""

SIZE = 7
# 创建一个长度为SIZE * SIZE的二维列表
array = [[0]*SIZE]
for i in range(SIZE - 1):
    array += [[0] * SIZE]
print(array)
# orient代表绕圈的方向
# 0-向下,1-向右,2-向左,3-向上
orient = 0
# 控制1 - SIZE * SIZE的数值填入二维列表中
# 其中j控制行索引,k控制列索引
j = 0
k = 0
for i in range(1, SIZE * SIZE + 1):
    array[j][k] = i
    # 位于1号转弯线上
    if j + k == SIZE - 1:
        # j>k,位于左下角
        if j > k:
            orient = 1
        # 位于右上角
        else:
            orient = 2
    # 位于2号转弯线上
    elif (j == k) and (k >= SIZE / 2):
        orient = 3
    # 位于三号转弯线上
    elif (j == k - 1) and (k <= SIZE / 2):
        orient = 0
    # 根据方向控制行索、引列索引的改变
    # 如果方向为向下绕圈
    if orient == 0:
        j += 1
    # 如果是向右绕圈
    elif orient == 1:
        k += 1
    # 向上
    elif orient == 3:
        j -= 1
    # 向左
    else:
        k -= 1
# 采用遍历输出上面的二维表
for i in range(SIZE):
    for j in range(SIZE):
        print('\t%02d' % array[i][j], end="")
    print("")
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值