网络编程
位置:首页>> 网络编程>> Python编程>> Python真题案例之蛇形数组详解

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

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

标签:Python,蛇形数组,案例

问题描述??

输入一个正整数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

0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com