蓝桥杯算法题——蛇形填数

题目:

如下图所示,小明用从1 开始的正整数“蛇形”填充无限大的矩阵。

容易看出矩阵第二行第二列中的数是5。请你计算矩阵中第20 行第20 列的数是多少

 问题解析:

我们可以把每一斜排当成一个单位,第1斜排有1个数,第2斜排有2个数,第3斜排由3个数。。。


第i斜排和这一斜排上任意一个数的坐标(m,n)关系有i = m + n - 1,所以我们可以先找到我们要求的位置在哪一斜排以及前面i-1斜排已经有了多少个数,先记录在结果中
如果我们要求的数在第奇数斜排是从左下往右上数字逐渐变大的,那么我们只需要把坐标定位到最下面的那一行,结果增大一个数,行数向上移动一行,直到移动到和所求位置相同的行数,返回结果
偶数斜排与上面的的操作相反即可

 

代码:

package dayc;

public class demo2 {

	public static void main(String[] args) {
		int m = 20, n = 20, num = 0;
		int cnt = m + n - 1; //确定是哪一斜排
		for(int i = 1; i < cnt; i++) { //把前i-1排的数都加到结果中
			num += i;
		}
		//确定那一排是从上往斜下填还是从下往斜上填
		if(cnt % 2 == 0) {
			//偶数是从右上往下填
			int row = 1;
			while(row <= m) {
				num++;
				row++;
			}
		} else {
			int row = cnt;
			while(row >= m) {
				num++;
				row--;
			}
		}
		System.out.println(num);
	}

}






结果:

761

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值