Python真题案例之蛇形数组详解

 更新时间:2022年03月07日 15:38:25   作者:酷尔。  
这篇文章主要介绍了python实操案例练习,本文给大家分享的案例中主要讲解了蛇形数组,需要的小伙伴可以参考一下

问题描述🪐

输入一个正整数n

在n*n的方阵内填入1,2,3,4…n*n,要求填成蛇形。(回旋的向中间收敛)

样例输入:

4

样例输出:

不必严格按照格式输出,

问题分析🪐

蛇形填数,目的是为了考验我们对数组索引的熟悉情况,观察可知需要从右上角开始遍历 先向下等碰到了下限左转然后向上然后右转,一直遍历到最中心。这里需要对边界进行判断 我们对边界判断的时候需要有一个缓冲空间也就是说先判断下一位置再赋值。 (如果先赋值再判断,想往回走的话很麻烦),还有一点就是定住二维数组的一行或一列 移动另外的索引。由此我们可以写出以下代码。

代码实现🪐

老规矩先上运行结果:

有了上面的思路后我们还可以进行逆时针的蛇形数组。

使用定一移一的思想我们还可以对数组进行旋转。

蛇形数组源码

import sys


def sn1(n):
    arr=[]
    for i in range(n):
        arr.append([0]*n)

    row=0
    col=n-1
    arr[row][col]=1

    i=1
    while i<n*n:
        while row+1<n and (not arr[row+1][col]):
            arr[row+1][col]=i+1
            row+=1
            i+=1
        while col-1>-1 and (not arr[row][col-1]):
            arr[row][col-1]=i+1
            col-=1
            i+=1
        while row-1>-1 and (not arr[row-1][col]):
            arr[row-1][col]=i+1
            row-=1
            i+=1
        while col+1<n and (not arr[row][col+1]):
            arr[row][col+1]=i+1
            col+=1
            i+=1
        

    for i in range(n):
        flag=True
        for j in range(n):
            if flag:
                print(arr[i][j],end="")
                flag=False
            else:
                print("\t",arr[i][j],end="",sep="")
        print()

def sn2(n):
    arr=[]
    for i in range(n):
        arr.append([0]*n)

    row=0
    col=n-1
    arr[row][col]=i=1
    while i<n*n:
        while(col-1>-1 and not(arr[row][col-1])):
            arr[row][col-1]=i+1
            i+=1
            col-=1
        while(row+1<n and not(arr[row+1][col])):
            arr[row+1][col]=i+1
            i+=1
            row+=1
        while(col+1<n and not(arr[row][col+1])):
            arr[row][col+1]=i+1
            i+=1
            col+=1
        while(row-1>-1 and not(arr[row-1][col])):
            arr[row-1][col]=i+1
            i+=1
            row-=1
    for i in range(n):
        flag=True
        for j in range(n):
            if flag:
                print(arr[i][j],end="")
                flag=False
            else:
                print("\t",arr[i][j],end="",sep="")
        print()

    


if __name__=="__main__":
    n=int(input())
    print("蛇形数组如下(顺时针):")
    sn1(n)
    print("蛇形数组如下(逆时针):")
    sn2(n)

旋转数组源码

'''
大家都学习过矩阵,今天呢咱们将n*n类型的字符矩阵进行向左的90°旋转
'''
#生成全为零的矩阵
arr=[]
n=int(input())
for i in range(n):
    arr.append([0]*n)

#蛇形矩阵

row=0
col=n-1
arr[row][col]=i=1
while i<n*n:
    while row+1<n and not arr[row+1][col]:
        arr[row+1][col]=i+1
        i+=1
        row+=1
    while col-1>=0 and not arr[row][col-1]:
        arr[row][col-1]=i+1
        i+=1
        col-=1
    while row-1>=0 and not arr[row-1][col]:
        arr[row-1][col]=i+1
        i+=1
        row-=1
    while col+1<n and not arr[row][col+1]:
        arr[row][col+1]=i+1
        i+=1
        col+=1
print("旋转前如下:")
for temp in arr:
    print(temp)

print()

print("旋转后如下(旋转90°):")
for i in range(4):
    flag=True
    for j in range(4):
        if flag:
            print(arr[j][3-i],end="")
            flag=False
        else:
            print(" ",arr[j][3-i],end="")
    print()

print("旋转后如下(旋转180°):")
for i in range(4):
    flag=True
    for j in range(4):
        if flag:
            print(arr[3-i][3-j],end="")
            flag=False
        else:
            print(" ",arr[3-i][3-j],end="")
    print()

到此这篇关于Python真题案例之蛇形数组详解的文章就介绍到这了,更多相关Python 蛇形数组内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python运维自动化之nginx配置文件对比操作示例

    Python运维自动化之nginx配置文件对比操作示例

    这篇文章主要介绍了Python运维自动化之nginx配置文件对比操作,涉及Python针对文件的读取、遍历、比较进而达到差异对比的相关操作技巧,需要的朋友可以参考下
    2018-08-08
  • python调用腾讯云实名认证接口辨别身份证真假

    python调用腾讯云实名认证接口辨别身份证真假

    这篇文章主要为大家介绍了python辨别身份真假之腾讯云身份证实名认证接口,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • Python利用机器学习算法实现垃圾邮件的识别

    Python利用机器学习算法实现垃圾邮件的识别

    今天教大家利用简单的机器学习算法实现垃圾邮件识别,文中有非常详细的介绍及代码示例,需要的朋友可以参考下
    2021-06-06
  • Python爬虫进阶之爬取某视频并下载的实现

    Python爬虫进阶之爬取某视频并下载的实现

    这篇文章主要介绍了Python爬虫进阶之爬取某视频并下载的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • 详解Python3序列赋值、序列解包

    详解Python3序列赋值、序列解包

    这篇文章主要介绍了Python3序列赋值、序列解包的相关知识,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-05-05
  • Python实战之异步获取中国天气信息

    Python实战之异步获取中国天气信息

    这篇文章主要介绍了如何利用Python爬虫异步获取天气信息,用的API是中国天气网。文中的示例代码讲解详细,感兴趣的小伙伴可以动手试一试
    2022-03-03
  • Python学习之线程池与GIL全局锁详解

    Python学习之线程池与GIL全局锁详解

    本文我们将学习线程池的创建与全局锁。线程池的创建于进程池的原理是相同的;关于GIL全局锁,暂时没有代码上的练习,而是对其概念进行一个简单的启蒙,感兴趣的可以了解一下
    2022-04-04
  • python 如何利用argparse解析命令行参数

    python 如何利用argparse解析命令行参数

    这篇文章主要介绍了python 利用argparse解析命令行参数的步骤,帮助大家更好的理解和学习python,感兴趣的朋友可以了解下
    2020-09-09
  • asyncio 的 coroutine对象 与 Future对象使用指南

    asyncio 的 coroutine对象 与 Future对象使用指南

    asyncio是Python 3.4版本引入的标准库,直接内置了对异步IO的支持。asyncio的编程模型就是一个消息循环。今天我们就来详细讨论下asyncio 中的 coroutine 与 Future对象
    2016-09-09
  • Pandas+openpyxl进行Excel处理详解

    Pandas+openpyxl进行Excel处理详解

    这篇文章主要为大家详细介绍了如何使用pandas和openpyxl库对多个Excel文件进行多种处理的方法,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下
    2025-02-02

最新评论