第1篇 2020蓝桥杯试题C蛇形填数

1.题目

这个题目意思就是,按照这个蛇形把数字一一填出来,然后找出第20行第20列的数是多少。
在这里插入图片描述

2.理解

其实我也没有多少经验,首先想到的是,声明一个20*20的二维数组,然后把数字从1开始填进去,但是后来发现麻烦了。
然后我就在纸上画图,进行对比。
在这里插入图片描述
那么我可以发现,n行n列对应的数字为
在这里插入图片描述
不难发现,5 = 1 + 4 * 1;13 = 5 + 4 * 2;25 = 13 + 4 * 3 …
那么这就有一个规律,在n行n列中的数nextnum和(n-1)行(n-1)列中的数lastnum有着这么一种关系:nextnum = lastnum + 4 * (n - 1),这里的n是nextnum所在的行(行列相同,n行n列),由此,我们可以用两种不同的方法实现来求解

3.for循环实现

1.算法

(1)声明ret = 1,如果n不大于1,则不进入循环,否则进入循环,(取i=2开始,循环条件为i<=n),执行ret = ret + 4 * (n - 1);
(2)返回ret;

2.代码

int getNum_circulate(int n){
	int ret = 1;
	for(int i = 2;i <= n;i++){
		ret = ret + 4 * (n - 1);
	}
	return ret;
}

4.递归实现求解

递归和循环在一定程度上是可以替换的,因为这都是逐渐求解的思想。

1.算法

假设我们把n行n列对应的数字看作result,由上我们知道:
result(n) = result(n - 1) + (n - 1) * 4,则有
(1)如果n等于1则直接返回1
(2)如果n不等于1,则返回(n-1) * 4 + result(n-1)

2.代码

int getNum_recursion(int n){
	if(n == 1){
		return 1;
	}
	return (n - 1) * 4 + getNum_recursion(n - 1);
}

5.结语

当局者迷,旁观者清,身临其境的时候肯定会急,所以面对一个看似复杂的题目,特别是有时间限制做出来时,是会感觉有压力吧,所以多练习练习,让自己稳点。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大唐不良猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值