C语言网练习题:蛇行矩阵Python的解题方法

C语言网的练习题:蛇行矩阵

题目描述:
蛇形矩阵是由1开始的自然数依次排列成的一个矩阵上三角形。
输入
本题有多组数据,每组数据由一个正整数N组成。(N不大于100)
输出
对于每一组数据,输出一个N行的蛇形矩阵。两组输出之间不要额外的空行。矩阵三角中同一行的数字用一个空格分开。行尾不要多余的空格。
样例输入
5
样例输出
1 3 6 10 15
2 5 9 14
4 8 13
7 12
11

先来看看我的代码吧

def head(n):
    if n <= 1 :
        return 1
    return head(n - 1) + n - 1    #这个函数是用来计算矩阵的每列开头,如“1,2,4,7,11 ...”

times = int(input())#输入一个与矩阵行列数相关的数
ist = []#定义一个列表,目的在于存储一会儿要计算的数字
f = 0#这个变量就是来计算每一个元素的
for j in range(0,times):#这个循环是计算每列的开头
    ist1 = []#定义一个临时的数组
    f = head(j)#计算列的开头
    for i in range(j+1,times+1):
        f += i#计算开头后面的元素
        ist1.append(f - 1)#存到一个列表中
    ist.append(ist1)#将临时列表存到此列表中,构成一个二维数组
    
for i in ist:#输出二维列表
    for j in i:
        print(j,"",end="")
    print()

每列开头比较特殊,我想不到好的办法去用循环来解,所以还是用了递归,大概的递归思路就是:

a(n) = a(n - 1) + n - 1;
a(1) = 1;

我的python基础不好,而且自己也比较笨,所以这个题也做了一下午,看了好多别人的代码,最后还是自己写了,下面是我求助一个大佬给出的答案@ 天元浪子,他的更简洁明了,咱们看一看。

>>> def print_snake(n):
 row = 0
 for i in range(n):
  col = row
  for j in range(i+1, n+1):
   col += j
   print(col, end=' ')
  row += i
  print()

  
>>> print_snake(5)
1 3 6 10 15 
2 5 9 14 
4 8 13 
7 12 
11 
>>> print_snake(6)
1 3 6 10 15 21 
2 5 9 14 20 
4 8 13 19 
7 12 18 
11 17 
16

真的是太简洁明了了,这才是Python,优雅,令人舒服。
哎,同志,革命仍在继续,我们还得努力啊!!!!

发布了11 篇原创文章 · 获赞 11 · 访问量 764

猜你喜欢

转载自blog.csdn.net/weixin_43818177/article/details/103647229