算法描述:
10 11 12 1
9 16 13 2
8 15 14 3
7 6 5 4
-
输入
- 直接输入方陈的维数,即n的值。(n<=100) 输出
输出结果是蛇形方阵。
-
代码如下:
输出结果:#include <cstdio> #include <cstring> const int max =100; int a[max][max]; int main (){ int n;//填充数组的维度 scanf("%d",&n); memset(a,0,sizeof(a));//主要用于初始化数组,即就是将a数组全部赋值为0, //memset他的填充是以字节为单位,一般用于对字符型变量的初值进行赋值. int cnt = 1;//填充计数器 int x = 0,y=0;//所填充矩阵的行列坐标 a[x][y]=1; //填充第一个值 while(cnt < n*n){//cnt填充到n*n才退出,当cnt计数到等于cnt时已经填充完毕 //cnt为已填数 while(y+1<n && a[x][y+1]==0){ a[x][++y] = ++cnt;//向右填数 检验是否下标越界&&是否已经填数 } while(x+1<n && a[x+1][y]==0){ a[++x][y] = ++cnt;//向下填数 检验是否下标越界&&是否已经填数 } while(y-1>=0 && a[x][y-1]==0){ a[x][--y] = ++cnt;//向左填数 检验是否下标越界&&是否已经填数 } while(x-1>=0 && a[x-1][y]==0){ a[--x][y] =++cnt;//向上填数 检验是否下标越界&&是否已经填数 } } //打印输出 for(int i=0;i< n;i++){ for(int j=0;j< n;j++) printf("%3d",a[i][j]); printf("\n"); } return 0; }