我发现了这种模式并决定打印它。这里打印2D模式
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)等直到N×N矩阵。
我有一个非常复杂的方法来打印它。有没有简单的方法来打印这种模式?
更新:增加了一个行和列
我发现了这种模式并决定打印它。这里打印2D模式
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)等直到N×N矩阵。
我有一个非常复杂的方法来打印它。有没有简单的方法来打印这种模式?
更新:增加了一个行和列
这似乎是一般规则如下:
给定一个位置作为一个元组(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开始超过最后完美的广场一个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
你是如何储存上述图案?它只是一个嵌套数组,列表或类似?你只是想要伪代码? – Draken
我正在填充矩阵的最后一行和最后一列的元素,一旦我到达(N,N),我创建另外一行和一列,然后重复它。 – Mustafa
将其存储在2d矩阵中。 – Mustafa