真题链接:https://www.lanqiao.cn/problems/594/learning/
题目描述:
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
如下图所示,小明用从1开始的正整数“蛇形”填充无限大的矩阵。1 2 6 7 15 ...
3 5 8 14 ...
4 9 13 ...
10 12 ...
11 ...
...容易看出矩阵第二行第二列中的数是5。请你计算矩阵中第20行第20列的数是多少?
前置讲解
1.蛇形生成矩阵:根据“蛇形”提示,容易联想到它的生成规律,如图中所示。我们想到构建这样的生成规律,直到生成出第20行20列的数就行了。你可以思考或尝试一下。你会发现这并不好构建,构建的模式是复杂的、容易出bug的。我们想其他的出路
2.对角线规律:如图我们可以发现,(2,2)比(1,1)大4,(3,3)比(2,2)大8,(4)(4)比(3)(3)大12......我们找到了规律。写成数学通项公式的形式:a_n - a_n-1 = 4(n - 1)。好了,如果写出an的通项公式,那n=20不就是答案吗?但是我不会,这还是一个比较复杂的求解题型,得把高中的我抓过来
3.规律+暴力:其实有更简单的方法,就是在找到的规律的基础上进行暴力枚举,机器不是最擅长这个(很少时间就可以完成)?妙,“巧妙地”就轻松解决了(前面说过好算法地评价标准,这就是个好算法/解法 https://blog.csdn.net/Verhan_Cao/article/details/135708996?spm=1001.2014.3001.5502)。我也没想到还能规律、暴力相结合地解题。
算法逻辑
# 思路:不直接暴力枚举、也不是完全凭规律,而是暴力和规律相结合的方式。
创建count,记录当前坐标的值
# 功能:循环相加19次得到(20,20)值,存到count
for 循环执行19次,从1开始到19,值在i
count加上 次数的四倍 到新count
打印count
# 对于本次代码写代码逻辑是变复杂了点,可以不必写出来,可以灵活点。但这些逻辑没意义?不,这些逻辑不在纸上,但肯定存在你脑子里。
代码逻辑
# 思路:不直接暴力枚举、也不是完全凭规律,而是暴力和规律相结合的方式。
# 创建count,记录当前坐标的值
count = 1
# 功能:循环相加19次得到(20,20)值,存到count
# for 循环执行19次,从1开始到19,值在i
for i in range(1, 20):
# count加上 次数的四倍 到新count
count += i * 4
# 打印count
print(count)