这是记录我做的一道关于蛇形矩阵的文章
1 题目描述
【问题描述】
将1,2,…,n*n个自然数,按蛇形方式存放在二维数组A[n][n]中。“蛇型”方式,即是按“副对角线”平行的各对角线,从左下到右上,再从右上到左下,存放n2个整数。例如:
1 3 4
2 5 8
6 7 9
【输入形式】 输入数组的阶数n。
【输出形式】 打印数据元素按蛇形排列的数组,整数打印的域宽为4。
【样例输入】3
【样例输出】
1 3 4
2 5 8
6 7 9
【样例说明】矩阵的阶数为3,打印按蛇形存放的1~9,注意域宽为4。
2 解决思路
首先一开始,我就开始猜规律,妄想用一种规律来解这道题目。很长很长时间后😅😅,发现这似乎不现实。然后我仿着大脑的思路,试图解决这道问题,结果就解决了。猛然之间有了一种“编程就是仿照人的思路告诉计算机怎么做的过程”感悟。
我们来看样例,发现可以有第一次打印1个,,第二次打印两个,第三次打印3个,第四次打印2个,第五次打印1个这样的规律。这样就可以用for循环控制打印个数。
然后,每一次打印分为两种状态,分别是上行,下行。也就是左下到右上,右上到左下。这样我们可以定义一个记录状态的变量。并且我们还发现。上行和下行是交替进行的。这就相当于解决了一大半问题。
最后一个问题,如何解决第一次到第二次这样的过度呢。我们发现其实一共有两种过度。一种是向下。一种是向右,这样我们定义两种状态。这两种状态也是交替进行的。等等,好像不是,发现如果到了右上角的元素,下一个状态不会改变,再找一找还有没有例外,。。。。。没了。于是,我们就可以针对这种例外做一个判断。
之后,这道题目就做出来了。😁
3 代码
#include<stdio.h>
int main()
{
int data[100][100];
int n;
scanf("%d",&n);
int point = 2;
int q=1,w=0;
int i,j;
data[0][0] = 1;
int flag =