【Python 百炼成钢】蛇形数组

简介: 【Python 百炼成钢】蛇形数组

问题描述🪐


输入一个正整数n

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

样例输入:4

样例输出:


071c8f89752e48ba8c2fe0e8129e63b5.png


不必严格按照格式输出,


问题分析🪐


蛇形填数,目的是为了考验我们对数组索引的熟悉情况,观察可知需要从右上角开始遍历

先向下等碰到了下限左转然后向上然后右转,一直遍历到最中心。这里需要对边界进行判断

我们对边界判断的时候需要有一个缓冲空间也就是说先判断下一位置再赋值。

(如果先赋值再判断,想往回走的话很麻烦),还有一点就是定住二维数组的一行或一列

移动另外的索引。由此我们可以写出以下代码。


代码实现🪐


老规矩先上运行结果:


13b44cd98a1a43d4affde30d5416fe28.png

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


69af81aa215e405c845d122317c17747.png


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


970604e130734d1d9781fc428f7c2ef4.png


蛇形数组源码

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()



相关文章
|
3月前
|
存储 Java 数据处理
(numpy)Python做数据处理必备框架!(一):认识numpy;从概念层面开始学习ndarray数组:形状、数组转置、数值范围、矩阵...
Numpy是什么? numpy是Python中科学计算的基础包。 它是一个Python库,提供多维数组对象、各种派生对象(例如掩码数组和矩阵)以及用于对数组进行快速操作的各种方法,包括数学、逻辑、形状操作、排序、选择、I/0 、离散傅里叶变换、基本线性代数、基本统计运算、随机模拟等等。 Numpy能做什么? numpy的部分功能如下: ndarray,一个具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组 用于对整组数据进行快速运算的标准数学函数(无需编写循环)。 用于读写磁盘数据的工具以及用于操作内存映射文件的工具。 线性代数、随机数生成以及傅里叶变换功能。 用于集成由C、C++
368 1
|
搜索推荐 索引 Python
【Leetcode刷题Python】牛客. 数组中未出现的最小正整数
本文介绍了牛客网题目"数组中未出现的最小正整数"的解法,提供了一种满足O(n)时间复杂度和O(1)空间复杂度要求的原地排序算法,并给出了Python实现代码。
391 2
|
Python
【Leetcode刷题Python】53. 最大子数组和
LeetCode第53题"最大子数组和"的Python解决方案,利用动态规划的思想,通过一次遍历数组并维护当前最大和以及全局最大和来求解。
328 2
|
Python
【Leetcode刷题Python】剑指 Offer 03. 数组中重复的数字
解决剑指Offer题目 "数组中重复的数字" 的Python实现方法,通过使用字典来记录数组中每个数字的出现次数,快速找出重复的数字。
137 1
|
12月前
|
人工智能 Unix Java
[oeasy]python059变量命名有什么规则_惯用法_蛇形命名法_name_convention_snake
本文探讨了Python中变量命名的几种常见方式,包括汉语拼音变量名、蛇形命名法(snake_case)和驼峰命名法(CamelCase)。回顾上次内容,我们主要讨论了使用下划线替代空格以提高代码可读性。实际编程中,当变量名由多个单词组成时,合理的命名惯例变得尤为重要。
442 9
|
机器学习/深度学习 并行计算 大数据
【Python篇】NumPy完整指南(上篇):掌握数组、矩阵与高效计算的核心技巧2
【Python篇】NumPy完整指南(上篇):掌握数组、矩阵与高效计算的核心技巧
457 10
|
索引 Python
【Python篇】NumPy完整指南(上篇):掌握数组、矩阵与高效计算的核心技巧1
【Python篇】NumPy完整指南(上篇):掌握数组、矩阵与高效计算的核心技巧
467 4
|
存储 数据处理 索引
如何删除 Python 数组中的值?
【8月更文挑战第29天】
624 9
|
索引 Python
向 Python 数组添加值
【8月更文挑战第29天】
323 8
|
存储 缓存 C语言

推荐镜像

更多