题解 | #蛇形矩阵#
蛇形矩阵
https://www.nowcoder.com/practice/f228a074c5274619b26be544962375e1
#include<stdio.h>//虽然比较麻烦但算是一种全新的思路
int main()//因为比较懒就不想截图了,我是根据每一条斜边来储存的,根据i变化的规律对应斜边坐标变化的规律进行储存,i每加一对应着一条斜边{
int n=0;
scanf("%d",&n);
int i,j=0;//整个函数的核心,就是横纵坐标的‘和’,当a=b=0时,i等于0;当a=0,b=1||a=1,b=0时,i等于1,以此类推.....
int arr[50][50];
int count=1;
int flag=1;//相当于下半部分后a,b的“边界”
for(i=0;i<=2*n-1;i++)
{
int a,b=0;
if(i<n)//上半部分
{
if(i==0)arr[0][0]=count;//赋予坐标起点
else if(i%2!=0)
{
a=0;
b=i;
while(b>=0)
{
arr[a][b]=++count;
a++;
b--;
}
}//为奇数时
else
{
a=i;
b=0;
while(a>=0)
{
arr[a][b]=++count;
a--;
b++;
}
}//为偶数时
}
else //下半部分
{
if(i==(2*n-1)){arr[n-1][n-1]=count;}//赋予坐标终点
else if(i%2!=0)
{
a=flag;
b=i-flag;
while(b>=flag)
{
arr[a][b]=++count;
a++;
b--;
}
flag++;
} //为奇数时
else
{
b=flag;
a=i-flag;
while(a>=flag)
{
arr[a][b]=++count;
a--;
b++;
}
flag++;
}//为偶数时
}
}
//打印最终结果
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
printf("%d ",arr[i][j]);
}
printf("\n");
}
return 0;
}
查看1道真题和解析