1. 程式人生 > >Python練習(16)--回形矩陣-難-沒做出來

Python練習(16)--回形矩陣-難-沒做出來

問題描述

列印回型矩陣如圖:
1 2 3 4 5 6 7 8
28 29 30 31 32 33 34 9
27 48 49 50 51 52 35 10
26 47 60 61 62 53 36 11
25 46 59 64 63 54 37 12
24 45 58 57 56 55 38 13
23 44 43 42 41 40 39 14
22 21 20 19 18 17 16 15

分析;
難,一片混亂。肯定要用迴圈的,想著設兩個迴圈表示行和列,但又試了一下行不通,所以設了一個,但一個又沒辦法按順序輸出,所以搞成了下面的樣子,搞不下去了…

在這裡插入圖片描述

借鑑程式碼

def snakeNum(n):
    a = [[0 for i in range(n)] for j in range(n)]

    p = 0
    q = n - 1
    t = 1
    while p < q:
        for i in xrange(p, q):
            a[p][i] = t
            t += 1
        for i in xrange(p, q):
            a[i][q] = t
            t += 1
        for i in xrange(q, p, -1):
            a[q][i] = t
            t += 1
        for i in xrange(q, p, -1):
            a[i][p] = t
            t += 1
        p += 1
        q -= 1
    if p == q: a[p][p] = t
    for i in range(n):
        print a[i]

snakeNum(8)

看完直呼精妙,總結:
1 一定要找到規律,規律是具有重複性的,從前面的例子找到,後面的一定適用,只是條件需要改變一下;
2 引數選擇問題,感覺迴圈的引數能少就少,儘量不要給自己增加障礙;
3 迴圈的範圍這個東西,不一定需要用變數來表示,如上題,僅用兩個常量足矣,只需要增減常量就能滿足需要。

還有很遠的路要走呢。前陣子做得題都是easy,繼續上下求索吧ヾ(◍°∇°◍)ノ゙

參考https://blog.csdn.net/u010019717/article/details/51450965#1-回型矩陣-中