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,優雅,令人舒服。
哎,同志,革命仍在繼續,我們還得努力啊!!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章