Advertisement

蓝桥杯真题练习-蛇形填数

阅读量:

蓝桥杯真题练习-蛇形填数

复制代码
    ## 填空题, 2020, 省赛

题目地址

题目概述

1 2 6 7 15 …
3 5 8 14 …
4 9 13 …
10 12 …
11 …

这是按照蛇形填的数,让你找第20行20列的数是谁

思路

1.这是道填空题,解决问题嘛,那就按最简单的方法来就好,通过观察可以发现,(20,20)如果数改为(2,2)对应的是5,改为(3,3)对应的是13。这就有意思了,那(20,20)肯定也是这个蛇形填数形成的三角形的斜边最中间的数。
2.而且你看哈,如果我们把斜边分层,例子中,(3,3)是在第5层,而且恰巧现有三角形的行数列数就是5,那好办了找(n,n),肯定是在第n 2-1层(观察出来的规律)。除去本层就还剩n 2-2层,把从第一层到第n _2-2层的数的个数求和不就是一个a1=1,d=1的等差数列求和嘛

在这里插入图片描述

多说一些,没必要真的写出蛇形填数,别太较真,现实生活考验的是你解决问题的能力。有多的时间写着玩玩倒是没啥。

对于只需要找到(n,n)这种形式的解来说,
首先按照步骤3的操作得到第一个数值,
然后按照步骤4的操作得到第二个数值,
将这两个结果相加即可得到最终结果。
在代码实现中,
我们可以通过注释掉输入n的部分来简化程序,
从而直接跳过蛇形填数的具体细节。
无需过于纠结于蛇形填数的具体细节,
更多的是培养解决问题的能力。
如果有足够的时间,
不妨尝试手工推导出相应的算法逻辑,
这样既能加深理解又能提升编程效率。

复制代码
    #include<iostream>
    using namespace std;
    int main(){
    	int middle,n=20;
    	//如果是第20行20列,此时至少有20*2-1行(观察出来的)
    	//对应的(20,20)是斜着看最中间的数,此斜边数的个数就是行数,20*2-1
    	//只要将前面的所有值按照d=1的等差数列求和,加上斜边中间的值前面的数即可
    	//也就是说前面是20*2-2行→1*20*2-2+(20*2-2)*(20*2-2-1)*1/2
    	//加上(20*2-1+1)/2 
    	//cin>>n;
    	middle=n*2-2+(n*2-2)*(n*2-2-1)/2+(n*2-1+1)/2;
    	cout<<middle;
    	return 0;
    }

全部评论 (0)

还没有任何评论哟~