蓝桥杯蛇形填空简单办法c语言版
快考试闲的练了一下填空题
发现这道题没有很多博主说的那么复杂
我们可以把这个矩阵改变一下格式
因为我们目前按照题目格式是看不出任何规律的 即使看出来也是写不出代码的规律
所以我们就想着改变一下格式将你找出来但你写不成代码的规律转变为你可以写出代码的规律
比如我们发现每条对角线都是递增或递减 这要想实现很简单只需要一个变量++就可以 但你现在在这个格式的矩阵下你很难用代码写出这个规律 因为你的横纵坐标一直在变
所以我们就要转变成只变一个坐标的规律 这样才能写出你发现的这个规律的代码
于是我们就可以把从第二行开始每一行都向右移动 直到每一列都是递减或递增
第二行右移2-1列
第三行右移3-1列
以此类推
第n行右移动n-1列
于是我们就可以实现这个规律
定义一个结构体数组
每一列为一个结构体
第一列1
第二列2 3
第三列3 4 5
…
我们可以发现第n列有n个数据
于是我们就可以写出代码
但每一列不一定是自增或者自减
所以我们发现当n=1或者n为偶数的时候从上到下递增
于是我们就可以写一个死循环while(1)
里面加两个for循环分别代表奇偶列
具体实现看代码大家应该都懂了吧
最后要原矩阵20行20列的数
因为我们的矩阵n行右移动n-1列相比于原矩阵来说
所以我们的就是对应20+(20-1)=39列
下标从1开始的哦
#include<stdio.h>
struct kris{
int n[19000];
}s[1900];
main()
{
/*1 2 6 7 15
3 5 8 14
4 9 13
10 12
11*/
int o=1,i=1,k=1;
while(1)
{
for(i=1;i<=o&&(o%2==0||o==1);i++)
{
s[o].n[i]=k;
k++;
printf("%d ",s[o].n[i]);
if(i==o)
printf("\n");
}
for(i=o;i>=1&&(o%2!=0&&o!=1);i--)
{
s[o].n[i]=k;
k++;
printf("%d ",s[o].n[i]);
if(i==1)
printf("\n");
}
o++;
if(o==40)
break;
}
printf("%d",s[39].n[20]);
}
ps:每个for循环我都加了输出是为了让大家看到具体过程 真正操作的时候不需要哦
如果读者发现了问题 评论区可以给我指出来
感谢各位!