试题 D:蛇形填数
类型:结果填空,总分:10分
【问题描述】
如下图所示,小明用从 1 开始的正整数“蛇形”填充无限大的矩阵。
容易看出矩阵第二行第二列中的数是 5。请你计算矩阵中第 20 行第 20 列的数是多少?
【思路】
-
这题给的位置很有规律性,很容易通过归纳规律得出结果,这里我仅从代码题角度入手,给出可以求任意第m行第n列的数是多少的代码思路
-
思路一:
- 把每一斜排当成一个单位,第1斜排有1个数,第2斜排有2个数,第3斜排由3个数。。。
- 第i斜排和这一斜排上任意一个数的坐标(m,n)关系有
i = m + n - 1
,所以我们可以找到我们要求的位置在哪一斜排以及前面i-1斜排已经有了多少个数,先记录在结果中 - 如果我们要求的位在第奇数斜排是从左下往右上数字逐渐变大的,那么我们只需要把坐标定位到最下面的那一行,结果增大一个数,行数向上移动一行,直到移动到和所求位置相同的行数,返回结果
- 偶数斜排与上面的的操作相反即可
-
思路二:
- 比较常用的思路,开一个比较大的数组,模拟填数的过程
- 定义一组变量当位置的指针,指针从(1,1)位置开始以向右,从右上到左下,向下,从左下到右上的顺序移动填数
- 输出数组对应位置的数即可
【代码一】
public class D {
public static void main(String[] args) {
int m = 20, n = 20, ans = 0;
int cnt