蓝桥杯跟练 DAY 4

前言

我是小编dulala😘

今天跟练的题目是《蛇形填数》:

老规矩:看了题目自己先想想,再看解析和代码实现喔

蛇形填空

题目描述:

92929e2db7654ea482a2565e503ff262.png

蓝桥杯是由填空题和编程题。填空题我们就可以利用一些别的数学方法来算

题目详解:

方法一:

首先利用excel做一个基础的表格:

fe6445256c79478ab4790858b049293b.png

黄色标记的地方为(5,5),我要求的是(20,20),所以可以利用类比的思想来求解。

所以问题一就是41要怎么求来?我发现对角线是从1开始递加的,(5,5)所在第9(2*5-1)条对角线,故((1+9)*9)/2求得该列最大值:45,又可以发现45-4就等于41。而这个4即(5-1)。

这下规律就被我们找到啦!只需要将5替换成20进行计算即可。

即:2*20-1=39,((1+39)*39)/2=780;780-(20-1)=761

方法二:

在绘制excel表格的时候就不难发现这个蛇形走位是有规律的,第一行(r)第一列(c)尤为重要。我们可以发现:

  • r=1,c为奇数时:下一步为(r,c+1)
  • r=1,c为偶数时:下一步为(r-1,c-1)
  • r为奇数,c=1时:下一步为(r+1,c+1)
  • r为偶数,c=1时:下一步为(r+,c)
  • r+c为偶数时,下一步为(r+1,c+1)
  • r+c为奇数时,下一步为(r-1,c-1)

由此我们可以按这六种情况来模拟,每走一步,answer加一,直到(20,20)输出我们想要的answer。

 

代码实现:

#include<stdio.h>

int main()
{
	int r = 1, c = 1;
	int ans = 1;
	while (r != 20 || c != 20)
	{
		if (c == 1 && r % 2 == 0) 
			c++;
		else if (c == 1 && r % 2 != 0)
		   { r++; c--; }
		else if (r == 1 && c % 2 == 0) 
		   { r--; c++; }
		else if (r == 1 && c % 2 != 0)
			c++;
		else if ((r + c) % 2 == 0) 
		   { r++; c++; }
		else 
		   { r--; c--; }
		ans++;
	}
	printf("%d", ans);
	return 0;
}

碎碎念

😝既然已经看到这里啦!说明你又成功地打卡了一天呢!👍👍(别忘了在评论区打卡喔!)

💕希望今天你也能有所收获

😝小编如果有错误,或者说有可以优化的代码,欢迎在评论区讨论喔!

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值