前言
我是小编dulala😘
今天跟练的题目是《蛇形填数》:
老规矩:看了题目自己先想想,再看解析和代码实现喔
蛇形填空
题目描述:
蓝桥杯是由填空题和编程题。填空题我们就可以利用一些别的数学方法来算
题目详解:
方法一:
首先利用excel做一个基础的表格:
黄色标记的地方为(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;
}
碎碎念
😝既然已经看到这里啦!说明你又成功地打卡了一天呢!👍👍(别忘了在评论区打卡喔!)
💕希望今天你也能有所收获
😝小编如果有错误,或者说有可以优化的代码,欢迎在评论区讨论喔!