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,优雅,令人舒服。
哎,同志,革命仍在继续,我们还得努力啊!!!!