用python实现三道简单算法题:杨辉三角,蛇形矩阵,金字塔 - Go语言中文社区

用python实现三道简单算法题:杨辉三角,蛇形矩阵,金字塔


分享几道简单的python打印输出的问题,本质上都是可以将其分解成一个大循环之中有几个小循环。

1.杨辉三角

主要特点:

  1. 每个数等于它上方两数之和。

  2. 每行数字左右对称,由1开始逐渐变大。

  3. 每行端点与结尾的数为1

def triangles(N):
#   首行
    line = [1]
    for _ in range(N):
#       生成器
        yield line
        for i in range(1, len(line)):
#           每个数等于它上方两数之和。
            line[i] = pre[i] + pre[i - 1]
#       结尾端点为1,需要额外添加
        line.append(1)
#        将本行当做生成下一行的依据
        pre = line[:]

N = int(input("请输入一个整数:"))    
for i in triangles(N):
    print(i)

2.打印蛇形矩阵

input:4

打印如下:

  1      2      3     4
  12   13    14    5
  11   16    15    6
  10    9      8     7

# NumPy系统是Python的一种开源的数值计算扩展。
# 这种工具可用来存储和处理大型矩阵,
# 比Python自身的嵌套列表(nested list 
# structure)结构要高效的多
# (该结构也可以用来表示矩阵(matrix))
# 强大的N维数组

观察图形可以看出:

4*4 = 4+3+3+2+2+1+1

5*5 = 5+4+4+3+3+2+2+1+1

所以大循环套着四个小循环,而小循环的次数有以上规律
代码实现如下:

    

# -*- coding: utf-8 -*-
"""
Created on Tue Aug 14 08:47:34 2018

@author: Python
"""

import numpy

N = int(input("请输入一个整数:"))
#先打印出N*N的0矩阵
Arr = numpy.zeros((N,N),dtype=numpy.int16)

#记录数字
num = 1
i = 0 #记录行
j = 0 #记录列
times = N  #记录循环次数
while num <= N*N:
#    向右,列的变化,不断增加
    for _ in range(times):
#        改变数组对应位置的值
        Arr[i][j] = num
        num += 1
        j += 1
    times -= 1
#    循环结束时,行列的值需要相应的改变
    j -= 1
    i += 1

#    向下,行的变化,不断增加
    for _ in range(times):
        Arr[i][j] = num
        num += 1
        i += 1
    i -= 1
    j -= 1
  
#    向左,列的变化,不断减少
    for _ in range(times):
        Arr[i][j] = num
        num += 1
        j -= 1
    times -= 1
    j += 1
    i -= 1

#    向上,行的变化,不断减少
    for _ in range(times):
        Arr[i][j] = num
        num += 1
        i -= 1
    i += 1 
    j += 1
    

print(Arr)
    
    
    
        

3.打印三角形数:

# 比如,输入n=5
#     1
#    121
#   12321
#  1234321
# 123454321
 

N = int(input("请输入N:"))
i = 1
while i <= N:
    i += 1
    # 打印空格0,N-i
    for x in range(0, N+1-i):
        print(" ", end='')
    # 从小到大打印数字1->i
    for y in range(1,i):
        print(y, end='')
    # 从大到小打印数字
    for z in range(1,i-1):
        print(i-1-z, end='')
    print("")

 

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/weixin_42499361/article/details/81661569
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-04-18 22:15:30
  • 阅读 ( 1347 )
  • 分类:算法

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢