2024年11月12日 星期二

回形文

 for n in [1,3,5,7]:

    # 初始化矩陣

    d = [[0] * n for i in range(n)]

    dr = [[0, 1], [1, 0], [0, -1], [-1, 0]]  # 右、下、左、上四個方向

    

    # 起始值與起始位置

    k = 1

    r, c = n//2, n//2  # 中心位置

    d[r][c] = k  # 中心點

    k += 1

    

    # 螺旋控制變數

    di = 0  # 當前方向索引

    g = 1   # 當前移動步數

    

    # 填滿矩陣

    while k <= n**2:  # 填滿到25為止

        for _ in range(2):  # 每個步數需要走兩次(右下、左上)

            for _ in range(g):  # 走當前步數

                # 更新位置

                r, c = r + dr[di][0], c + dr[di][1]

                d[r][c] = k

                k += 1

                if k > n**2:

                    break  # 如果已填滿,跳出迴圈

            di = (di + 1) % 4  # 更新方向

            if k > n**2:

                break  # 如果已填滿,跳出迴圈

        g += 1  # 增加步數

    

    # 輸出結果

    for i in d:

        for j in i:

            print(f'{j:>4}', end='')

        print()

    print()


# 執行結果

  #  1


  #  7   8   9

  #  6   1   2

  #  5   4   3


  # 21  22  23  24  25

  # 20   7   8   9  10

  # 19   6   1   2  11

  # 18   5   4   3  12

  # 17  16  15  14  13


  # 43  44  45  46  47  48  49

  # 42  21  22  23  24  25  26

  # 41  20   7   8   9  10  27

  # 40  19   6   1   2  11  28

  # 39  18   5   4   3  12  29

  # 38  17  16  15  14  13  30

  # 37  36  35  34  33  32  31

沒有留言:

張貼留言