这是受Calvin's Hobbies最近乘法表挑战的启发。
编写一个函数或程序,该函数或程序以整数N
作为输入,并打印或返回N×N的唯一乘法螺旋。该代码必须(理论上)适用于0到1000之间的N(尽管很难输出)。输出应等于通过以下过程生成的表:
填写N×N乘法表。例如,N = 3:
1 2 3 2 4 6 3 6 9
从左上角顺时针旋转,记下您访问的数字。当您访问已访问的号码时,将其替换为0。
几个例子可能会更清楚:
n = 0:
0
n = 1:
1
n = 2: // Spiral order:
1 2 // 1 2
0 4 // 4 3
n = 3:
1 2 3 // 1 2 3
0 4 6 // 8 9 4
0 0 9 // 7 6 5
n = 4:
1 2 3 4 // 1 2 3 4
0 0 6 8 // 12 13 14 5
0 0 9 12 // 11 16 15 6
0 0 0 16 // 10 9 8 7
n = 5:
1 2 3 4 5
0 0 6 8 10
0 0 9 12 15
0 0 0 16 20
0 0 0 0 25
n = 10:
1 2 3 4 5 6 7 8 9 10
0 0 0 0 0 12 14 16 18 20
0 0 0 0 15 0 21 24 27 30
0 0 0 0 0 0 28 32 36 40
0 0 0 0 25 0 35 0 45 50
0 0 0 0 0 0 42 48 54 60
0 0 0 0 0 0 49 56 63 70
0 0 0 0 0 0 0 64 72 80
0 0 0 0 0 0 0 0 81 90
0 0 0 0 0 0 0 0 0 100
这些数字如下所示:
可接受任何合理的输出格式,但是它必须是一个N×N矩阵,不能仅仅是列表。可接受以下格式,因为有N个易于区分的1×N列或N×1行:
[[1 2 3][0 4 6][0 0 9]] <-- OK
[[1 0 0][2 4 0][3 6 9]] <-- OK
ans = <-- OK
1 2 3
0 4 6
0 0 9
以字节为单位的最短代码获胜。
n=0
在乘法表中没有零的地方会有一个输出。我能理解n=1
会输出1,但为什么要包含零?
n=0
应该是一个0×0矩阵,否则问题将不一致。