Python真题案例之蛇形数组详解
作者:酷尔。 发布时间:2021-12-09 11:00:40
标签: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()
来源:https://blog.csdn.net/apple_51931783/article/details/123215979


猜你喜欢
- MySQL多字段相同数据去重复MySQL多字段去重复实际上是单字段去重复的衍生,原理就是把多字段数据通过子查询合并为单字段的数据表,再通过单
- Python实现对网易云音乐的数据进行一个数据清洗和可视化分析对音乐数据进行数据清洗与可视化分析关于数据的清洗,实际上在上一一篇文章关于抓取
- 这里提供三种方法:1,使用正则表达式Function regKillHTML(str) &nb
- 在这个自动化时代,我们有很多重复无聊的工作要做。 想想这些你不再需要一次又一次地做的无聊的事情,让它自动化,让你的生活更轻松。 那么在本文中
- 本文实例讲述了JS实现简易图片轮播效果的方法。分享给大家供大家参考。具体如下:这里使用JS制作简易图片轮播效果:制作比较粗糙,使用的图片是w
- 导言很多Web程序都支持用户帐号,根据不同的登录用户提供不同的选项,报表等功能。例如,就我们的教程中,我们要允许供应商公司的一些账户能登录网
- SQL Server具有强大的复制功能,除了将数据和数据库对象从一个数据库复制并准确分发的另一个数据库中,还要实行数据库之间的同步。SQL
- 在python中使用socket进行linux服务器与win10主机间的图像传输,供大家参考,具体内容如下前提:服务器与主机需要在同一局域网
- 最近因为要使用Python的缘故,安装了python IDE+pycharm,如此安装的原因是因为Pycharn 并不像anaconda一样
- 安装代码pip install python-docx1.批量化往word文件中添加大批量重复的数据from docx import Doc
- 前言在数据库有外键的时候,使用 select_related() 和 prefetch_related() 可以很好的减少数据库请求的次数,
- SQL Server 2005默认是不允许远程连接的,要想通过远程连接实现MSSQL,数据库备份,需要做如下设置:步骤/方法1.打开SQL
- 一、前言运算符重载:为运算符定义方法所谓重载,就是赋予新的含义同一个运算符可以有不同的功能二、重载作用让自定义的实例像内建对象一样进行运算符
- 前言最近接手一个老项目,典型的 Vue 组件化前端渲染,后续业务优化可能会朝 SSR 方向走,因此,就先做些技术储备。如果对 Vue SSR
- 本文介绍了一些JavaScript常用到得表单验证函数,方便大家使用。 判断是否为整数,是则返回true,否则返回falsefun
- SELECT TABLE_SCHEMA,TABLE_NAMEFROM information_schema.`COLUMNS`WHERE C
- Aphorismthe fight is worth it.django models 连接 sqlite 数据库django 版本为 1.
- 目录1.事件循环2.协程和异步编程2.1 基本使用2.2 await2.3 Task对象1.事件循环可以理解成为一个死循环,去检查任务列表中
- 下面先说说window.showModalDialog的基本用法showModalDialog() (IE 4+ 支持)showModele
- 我们在用Firefox上一些网站会看到这样的显示:现在时间是:108年1月26日而IE浏览器的话就显示正常的:现在时间是:2008年1月26