蓝桥杯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,但我们还是要善于观察,如果文中有一些小问题欢迎批评指正,毕竟自己也是小白,我们一起进步>-<!