疯狂Python讲义Unit4:绕圈圈

本文介绍了一种算法,该算法能够根据输入的整数尺寸生成一个指定大小的矩阵,并以逆时针方向填充从1到尺寸平方的整数。通过控制方向变量实现了矩阵的逆时针填充过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#!/usr/bin/python3
'''
某公司面试题:
输入4,返回

01 12 11 10
02 13 16 09
03 14 15 08
04 05 06 07

返回的矩阵是逆时针旋转输出数字
'''
# 1、生成size*size的二维列表
# 2、遍历1~num*num,将遍历的数字放进二维数组中,orient用来控制方向(坐标变化)

# 生成size*size的二维列表
size=int(input("请输入图表尺寸(int): "))
arrayTemp=[]
for i in range(size):
    arrayTemp+=[[0]*size]
print(arrayTemp)
print(size**2)

# 遍历1~num*num,将遍历的数字放进二维数组中,orient用来控制方向(坐标变化)
x,y=0,0 # 二维列表起始坐标
orient=0 # orient控制变向,按逆时针:0代表下、1代表右、2代表上,3代表左
for i in range(1,size**2+1):
    arrayTemp[x][y]=i
    if (x+y)==(size-1): # 第一种情况,图形左上角和右上角,向左或向右转弯
        if x>y:
            orient=1
        elif x<y:
            orient=3
    elif x==y and x>=(size/2): # 第二种情况,图形右下角,向上转弯
        orient=2
    elif x==y-1 and y<=(size/2): # 第三种情况,左上01开始,向下转弯
        orient=0

    if orient==0:
        x+=1
    elif orient==1:
        y+=1
    elif orient==2:
        x-=1
    elif orient==3:
        y-=1

# print(arrayTemp)
# 遍历二维列表,将数据打印出来
for i in range(size):
    for j in range(size):
        print("%02d"%(arrayTemp[i][j]),end="\t")
    print()

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值