蓝桥杯2020年真题演练——3、蛇形填数(JavaA组)

上一题:蓝桥杯2020年真题演练——2、既约分数(JavaA组)

题目描述

在这里插入图片描述
答案: 761

题目解析

⭐⭐这个题官方给出的答案是通过模拟这个蛇形矩阵来得到答案,这是一种方法,但比较考验编程能力和细心程度,比较容易出错,何况是在赛场上,这种方式太过浪费时间。实际上简单分析一下就可以找到其中的规律,最后完全可以把它当作一个高中的简单数列问题,一会儿就算出答案了。当然后边我也会给出模拟矩阵的代码。
🌙先看一下简单解法
⭐我们把这个三角形旋转一下
在这里插入图片描述
⭐原题中所说的第i行第i列其实就是1,5,13……这些数,对应的旋转后的这个图中就是第1,3,5,7…n行,可得出:n=2i-1。那么求第i行第i列的数也就是求反转后的图中的第n行中间的那个数,且满足n=2i-1。
⭐接下开看看如何求第n行中间的数
比如第五行中间的数是13,它可以是这么来的,前面四行的数再加上第五行加一的一半,也就是加上(5+1)/2=3。即:n=10+(5+1)/2=13。
同样第n行中间的数也是这么算的,前(n-1)行的数加上第n行数加一的一半
而前(n-1)行的数可以通过求和公式得到,结果是:(n2-n)/2
即:an=(n2-n)/2+(n+1)/2
现在已知i=20,由n=2i-1得n=39,再由an=(n2-n)/2+(n+1)/2可得an=761

⭐⭐模拟矩阵
定义 rr​ 表示当前位置所在行,cc​ 表示当前位置所在列,ansans 记录当前位置的数值。

那么下一个位置将会有以下六种情况:

r=1,c 为奇数:那么下一步将会到达的位置为 (r,c+1)。
r=1,c 为偶数:那么下一步将会到达的位置为 (r+1,c−1)。
c=1​,r 为偶数,那么下一步将会到达的位置为 (r+1,c)。
c=1,r为奇数且 r!= 1,那么下一步将会到达的位置为(r−1,c+1)​。
r!=1,c!=1,r+c 为奇数,那么下一步将会到达的位置为 (r+1,c−1)。
r!=1,c!=1​,r+c​ 为偶数,那么下一步将会到达的位置为 (r−1,c+1)​。
按照这 6 种情况模拟,每走一步 ans 就加 1,直到 r=20,c=20 时结束模拟输出 ans。

代码解析

import java.util.*;
public class Main {
    public static void main(String[] args) {
        int r = 1 , c = 1 , ans = 1;
        while(r != 20 || c != 20){
            if(r == 1){
                if(c % 2 == 1) c ++ ;
                else {
                  r ++ ; c --;
                }
            }
            else if(c == 1){
                if(r % 2 == 0) r ++;
                else {
                  r -- ; c ++ ;
                }
            }
            else if((r + c) % 2 == 1) {
              r ++ ; c -- ;
            }
            else {
              r -- ; c ++ ;
            }
            ans ++ ;
        }
        System.out.println(ans);
    }
}

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值