#51832: python解


bob981115@gmail.com (Bob)

學校 : 國立武陵高級中學
編號 : 312562
來源 : [101.12.128.235]
最後登入時間 :
2025-08-31 18:27:16

把它拆成一圈一圈的,然後範例很搞別管它

def output(n, m):
    def m1():
        num = 0
        row, column = -1, -1
        for i in range(n // 2):
            row +=1
            for _ in range(n-1-2*i):
                num += 1
                column += 1
                result[row][column] = num
            column += 1
            for _ in range(n-1-2*i):
                num += 1
                result[row][column] = num
                row += 1
            for _ in range(n-1-2*i):
                num += 1
                result[row][column] = num
                column -= 1
            for _ in range(n-1-2*i):
                num += 1
                result[row][column] = num
                row -= 1
    def m2():
        num = 0
        row, column = -1, -1
        for i in range(n // 2):
            column += 1
            for _ in range(n-1-2*i):
                row += 1
                num += 1
                result[row][column] = num
            row +=1
            for _ in range(n-1-2*i):
                num += 1
                result[row][column] = num
                column += 1
            for _ in range(n-1-2*i):
                num += 1
                result[row][column] = num
                row -= 1
            for _ in range(n-1-2*i):
                num += 1
                result[row][column] = num
                column -= 1
    result = [[0]*n for _ in range(n)]
    if m == 1:#順
        if n % 2 == 0:
            m1()
        else:
            m1()
            idx = (n+1) // 2 -1
            result[idx][idx] = n ** 2
    else:    
        if n % 2 == 0:
            m2()
        else:
            m2()
            idx = (n+1) // 2 - 1
            result[idx][idx] = n**2
    return result
def main():
    import sys
    inp = list(map(int, sys.stdin.read().split()))
    T = inp.pop(0)
    for a in range(T):
        n = inp[2*a]
        m = inp[2*a+1]
        result = output(n, m)
        for line in result:
            ans = []
            for i in range(len(line)):
                if i > 0:
                    next_num = line[i]
                    if next_num >= 10 and next_num < 100:
                        width = 3
                    elif next_num >= 100 and next_num < 1000:
                        width = 2
                    elif next_num >= 1000:
                        width = 1
                    else:
                        width = 4
                    ans.append(" " * width)
                ans.append(str(line[i]))
            print("".join(ans))
            print()
if __name__ == "__main__":
    main()