s*******d 发帖数: 1027 | 1 给一个整数 N(n = m^2 - 1), 要求打印出下面这种格式, 比如m = 5;
0 1 2 3 4
15 16 17 18 5
14 23 24 19 6
13 22 21 20 7
12 11 10 9 8
用C的printf怎么输出? | w*****t 发帖数: 485 | 2 螺旋打印的变体。
不考虑空间复杂度的话,先用一个二维数组存入这些数,然后按行打印就行了。
限制了空间的话,就要找出数字的规律了。 | s*******d 发帖数: 1027 | 3 存入数组不行,因为M可以任意选择的
【在 w*****t 的大作中提到】 : 螺旋打印的变体。 : 不考虑空间复杂度的话,先用一个二维数组存入这些数,然后按行打印就行了。 : 限制了空间的话,就要找出数字的规律了。
| t****a 发帖数: 1212 | 4 这个问题是递归的。
最外面的一圈从0-15,边长为5
中间一圈从16-23,边长为3
最里面一圈24,边长为1
通项公式为
每一圈的开始数字=[n0,f(n0),f(f(n0)),...]
where
n0 = 0
f(n) = n+(l-1)*4
l = [m .. 1]
据此生成数字n<=i
x = m-l + i, y = m-l when n <= i < n+l
y = l, y = m-l+i-n when ...
得到了所有坐标以后就可以填数组了。
【在 s*******d 的大作中提到】 : 给一个整数 N(n = m^2 - 1), 要求打印出下面这种格式, 比如m = 5; : 0 1 2 3 4 : 15 16 17 18 5 : 14 23 24 19 6 : 13 22 21 20 7 : 12 11 10 9 8 : 用C的printf怎么输出?
| s*******d 发帖数: 1027 | 5
:据此生成数字n<=i
:x = m-l + i, y = m-l when n <= i < n+l
:y = l, y = m-l+i-n when ...
这一段没整明白,i是如何取值的? 另外,l的取值是1,3,5,...,m? m是偶数怎么办
【在 t****a 的大作中提到】 : 这个问题是递归的。 : 最外面的一圈从0-15,边长为5 : 中间一圈从16-23,边长为3 : 最里面一圈24,边长为1 : 通项公式为 : 每一圈的开始数字=[n0,f(n0),f(f(n0)),...] : where : n0 = 0 : f(n) = n+(l-1)*4 : l = [m .. 1]
|
|