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

作者:酷尔。 时间:2021-12-09 11:00:40 

问题描述??

输入一个正整数n

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

样例输入:

4

样例输出:

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

不必严格按照格式输出,

问题分析??

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

代码实现??

老规矩先上运行结果:

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

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

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

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

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

蛇形数组源码


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

来源:https://blog.csdn.net/apple_51931783/article/details/123215979

标签:Python,蛇形数组,案例
0
投稿

猜你喜欢

  • mysql数据库下损坏数据的恢复操作其过程总结

    2009-02-13 13:36:00
  • 一些常用的JavaScript函数(json)附详细说明

    2024-04-10 16:14:12
  • Python 可迭代对象 iterable的具体使用

    2021-08-28 08:24:32
  • JavaScript字符串对象substr方法入门实例(用于截取字符串)

    2024-06-05 09:53:44
  • MySQL数据库遭到攻击篡改(使用备份和binlog进行数据恢复)

    2024-01-16 13:06:38
  • Python jieba结巴分词原理及用法解析

    2023-08-29 17:43:36
  • Pandas 同元素多列去重的实例

    2023-02-09 21:03:32
  • python实现坦克大战游戏 附详细注释

    2023-06-26 07:58:13
  • c#实现数据库事务示例分享

    2024-01-28 05:03:02
  • Python基于域相关实现图像增强的方法教程

    2023-08-24 15:30:22
  • Python环境管理virtualenv&virtualenvwrapper的配置详解

    2021-09-28 01:08:08
  • element-ui中表格设置正确的排序及设置默认排序

    2024-05-09 15:25:48
  • 一文解决django 2.2与mysql兼容性问题

    2024-01-28 03:26:01
  • Java中@Pattern注解常用的校验正则表达式学习笔记

    2022-08-07 11:12:10
  • SQL Server 2005 还原数据库错误解决方法

    2024-01-14 05:45:43
  • Python pandas DataFrame基础运算及空值填充详解

    2022-01-01 22:19:49
  • SqlServer编写数据库表的操作方式(建库、建表、修改语句)

    2024-01-15 11:38:57
  • vue-quill-editor实现图片上传功能

    2024-04-30 10:22:40
  • 详解Django中的unittest及应用

    2022-10-24 08:26:54
  • python实现将一维列表转换为多维列表(numpy+reshape)

    2021-04-22 03:06:30
  • asp之家 网络编程 m.aspxhome.com