10 11 12 1
9 16 13 2
8 15 14 3
7 6 5 4
-
输入
- 直接输入方陈的维数,即n的值。(n<=100) 输出
- 输出结果是蛇形方陈。 样例输入
-
3
样例输出
-
7 8 1 6 9 2 5 4 3
代码如下:
#include<stdio.h>
#define maxn 105
int a[maxn][maxn];
int main(){
int n;
scanf("%d",&n);
int x=0;
int y=n-1; //定义x,y轴;
int tot=a[0][n-1]=1;//动笔填写的起点;
while(tot<n*n){ //容易忘记的地方。 因为在下面的嵌套循环里++tot,已经实现加一,这里不需要tot<=n*n;
while((x+1)<n&&(a[x+1][y]==0))
a[++x][y]=++tot;//先向下,y不变,x加一。先判断越界的条件再填数。
while((y-1)>=0&&(a[x][y-1]==0))
a[x][--y]=++tot;//再向左,x不变,y减一。
while((x-1)>=0&&(a[x-1][y]==0))
a[--x][y]=++tot;//再向上,y不变,x减一。
while((y+1)<n&&(a[x][y+1]==0))
a[x][++y]=++tot;//最后向右,x不变,y加一。
}//实现先下再左再上再右的反复循环填数。其中坐标是以矩阵的左上角为原点,向下为x轴,向右为y轴。
for (int x=0;x<n;x++){
for(int y=0;y<n;y++)
printf("%3d",a[x][y]);//输出三位数据,不够的前面补空格,实现右对齐。
printf("\n");//填写数据换行,完善矩阵形状。
}
return 0;
}