蓝桥杯B组蛇形填数c/c++

蓝桥杯B组蛇形填数c/c++

每日一题



题目

在这里插入图片描述


思路及解答

这道题首先可能想的是找一个规律,既然他问你的是第20行,第20列,我们就仔细观察对角线上的数,往后列举,分别是1,5,13,25……我们发现第一次是加一倍的4第二次是加2倍的4以此类推加到19次就是第20行20列元素。

代码如下:

#include<stdio.h>
int main(){
 int ant=1;
 for(int i=0;i<=19;i++){
 	ant+=i*4;
 }
 printf("%d",ant);
 return 0;
}

但是我们这里是求比较特殊的位置,那如果说换个位置呢?
比如:第20行16列,显然我们这种做法便不合适了。不妨换个思路。


我们观察可得,比较特殊的是第一行和第一列,余下我们在考虑,这是我们可以分类讨论。

三种情况:
1,第一行:
我们可以观察到如果是奇数列,则向后添加;如果是偶数列向左下角添加;
2,第一列:如果是偶数行,则向下添加;如果是奇数行则向上添加;
3,其他
在这里插入图片描述
我们可以看到当行列坐标相加和为偶数时是向右上填数,当行列坐标相加和为奇数时是向左下填数;

代码如下:

#include<bits/stdc++.h>
using namespace std;

int main(){
	     //行  列   
	int row=1,col=1,aut=1; 
while(1){
	if(row==1){           //第一行时
		if(col%2==1)col++;
		else row++,col--;	}
	else if(col==1){     //第一列时
			if(row%2==0)row++;
			else row--,col++;
		}else if((row+col)%2==1)row++,col--;//其他
		else row--,col++;
		aut++;
	if(row==20&&col==20){
	break;}
}
cout<<aut<<endl;
	return 0;
} 

答案:761

总结

(下面一些话无关紧要,请选择阅读)
这道题本身比较特殊,我就直接想找对角线上的规律,可能有些投机取巧Q~Q,但我们还是要善于观察,如果文中有一些小问题欢迎批评指正,毕竟自己也是小白,我们一起进步>-<!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值