蛇形方阵,这是一种输出方式,我个人认为是对二维数组理解的运用,
我们先看一下输入和输出吧
第一行先输入数字n,开始从1开始
就是像一条蛇一样,盘旋排列直至等于输入的数的平方
我们先思考一下,每次输出都是按行输出的,就是第一行输出完第二行,第二行输出完第三行.....以此类推
那咱们怎么才能做到呢,其实我刚开始也是一头雾水,但是咱们可以换一个思路:
将这个二维数组看成一个n*n的空间,咱们在这个空间内咱们想要的位置赋值,然后将二维数组依次输出就OK了
我是暴力找位置赋值
从第一个空间进行赋值,然后该换行和换列时,用while来进行判断(其实我个人觉得for也可以,但是我之前没写出来,我是fw)
上代码!!!
#include<stdio.h>
int main (void)
{
int n=0,i=1,k=1,count=1;
scanf("%d",&n);
int a[10][10]={0};
while(count<=n*n)
{
//在a[i][k]中,i代表纵列,k代表横行
//这里的四个循环是按照先往右赋值在往下赋值,再往左赋值,再往上赋值
while(a[i][k]==0&&i>0&&i<=n&&k>0&&k<=n&&count<=n*n)//这其中的条件是使在n*n的格子中赋值,不跑出去
{
a[i][k]=count;
k++;
count++;
}
//当a[i][k]移到该移动的最后一个格子时,赋完值会进入下一个格子,此时减一个i,会回到赋完值的最后一个格子
k--;
//再将格子往下移一个就是该赋值的格子
i++;
//下面加的count,也是相同的原因,多加了一次,所以开始不用加1
while(a[i][k]==0&&i>0&&i<=n&&k>0&&k<=n&&count<=n*n)
{
a[i][k]=count;
i++;
count++;
}
//同上,因为会多走一格,所以减掉
i--;
//往下走完了,该往左走
k--;
while(a[i][k]==0&&i>0&&i<=n&&k>0&&k<=n&&count<=n*n)
{
a[i][k]=count;
k--;
count++;
}
k++;
//往上走
i--;
while(a[i][k]==0&&i>0&&i<=n&&k>0&&k<=n&&count<=n*n)
{
a[i][k]=count;
i--;
count++;
}
i++;
//k++衔接下次循环
k++;
}
//输出结果,为了好看,每个数占三格
for(i=1;i<=n;i++)
{
for(k=1;k<=n;k++)
{
printf("%-3d",a[i][k]);
}
//不要忘记换行了
printf("\n");
}
return 0;
}
这就是蛇形方阵了,其实我感觉写完这道题,我的二维数组有了突破,理解更深了吧,加油!!!