我发现了这种模式并决定打印它。
1 2 5 10 17
3 4 7 12 19
6 8 9 14 21
11 13 15 16 23
18 20 22 24 25
这里的规则是从(0,0)到(0,1)到(1,0)到(1,1)到(0,2)到(2,0)到(1,2)至(2,1)至(2,2)等等至NxN矩阵。
我有一种非常复杂的打印方法。有没有简单的方法来打印这种模式?
更新:再添加一行和列
答案 0 :(得分:4)
似乎一般规则如下:
给定位置为元组(n,m),下一个位置是
在Python中:
def next_pos(n, m):
if n == m: return (n+1, 0)
if n > m: return (m, n)
if n < m: return (m, n+1)
示例:
N = 5
n, m = (0, 0)
matrix = [[None for _ in range(N)] for _ in range(N)]
for x in range(N*N):
matrix[m][n] = x+1
n, m = next_pos(n, m)
结果:
1 2 5 10 17
3 4 7 12 19
6 8 9 14 21
11 13 15 16 23
18 20 22 24 25
答案 1 :(得分:1)
这是一个Python解决方案,它首先将每一行扩展为每个其他数字,从最后一个完美正方形开始,然后添加一个新行,其中包含每个其他数字,从最后一个完美正方形开始2,以及最后的条目(这是序列中的下一个完美的正方形):
def expandSquare(square):
n = len(square[0])
for i, row in enumerate(square):
row.append(n**2 + 1 + 2*i)
square.append([k for k in range(n**2 + 2, (n+1)**2,2)] + [(n+1)**2])
def makeSquare(n):
square = [[1]]
for i in range(1,n): expandSquare(square)
return square
def pprint(square):
print('\n'.join('\t'.join(str(i) for i in row) for row in square))
例如,
>>> pprint(makeSquare(5))
1 2 5 10 17
3 4 7 12 19
6 8 9 14 21
11 13 15 16 23
18 20 22 24 25