题解 | 蛇形矩阵
蛇形矩阵
https://www.nowcoder.com/practice/f228a074c5274619b26be544962375e1
//1.将矩阵的移动方式分为两种,右和右上、下和左下,用一个整型变量来代表矩阵移动方式的改变,1代表右和右上,2代表下和左下
//2.将矩阵的移动情况分为两种,在边界上移动和在边界内部移动,因为边界有一行或一列是固定不变的,利用6个if语句对移动情况进行判断
#include <stdio.h> //标准输入输出函数头文件
int main()
{
int n; //定义整型变量,保存用户输入的数字
//输入
scanf("%d",&n);
int a[1000][1000]; //定义二维数组,保存目标矩阵
int i=0,j=0; //定义整型变量,控制矩阵的赋值
a[i][j]=1;
int pos=1; //定义整型变量,表示矩阵的移动方向
int k=1; //定义整型变量,便于给矩阵赋值
//利用while循环控制目标矩阵的赋值
while(k<=n*n)
{
//当移动到上边界时
if(i==0&&j<n-1&&pos==1)
{
a[i][++j]=++k;
pos=2;
}
//当移动到左边界
else if(j==0&&i<n-1&&pos==2)
{
a[++i][j]=++k;
pos=1;
}
//当移动到右边界
else if(j==n-1&&pos==1)
{
a[++i][j]=++k;
pos=2;
}
//当移动到下边界
else if(i==n-1&&pos==2)
{
a[i][++j]=++k;
pos=1;
}
//当在边界内移动
else if(pos==1)
{
a[--i][++j]=++k;
}
else if(pos==2)
{
a[++i][--j]=++k;
}
}
//输出
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
printf("%d ",a[i][j]);
}
printf("\n");
}
return 0;
}


查看6道真题和解析