蛇形填数

来源:互联网 发布:淘宝怎么切换类目 编辑:程序博客网 时间:2024/05/18 01:08
#include<stdio.h>
int main()
{
    int a[100][100];
    int x,y;int sum=1;
    int n;
    scanf("%d",&n);
    x=0,y=n-1;
    a[0][n-1]=1;
    while(sum<n*n)
    {
    while(x<n-1&&a[x+1][y]==0)//从右上角开始 1;向下走 走到 x=n-1 (x控制上下走的次数)
     a[++x][y]=++sum;
    while(y>0&&a[x][y-1]==0)//向左走  走到 y=0; (y 控制左右走的次数)
    a[x][--y]=++sum;
    while(x>0&&a[x-1][y]==0) //向上走  走到 x=0;
    a[--x][y]=++sum;
    while(y<n-1&&a[x][y+1]==0) //向右走   走到 y=n-1;
    a[x][++y]=++sum;
   
    }
         int i,j;
         for(i=0;i<=n-1;i++)
         {
        for(j=0;j<=n-1;j++)
        printf("%4d",a[i][j]);
        printf("\n");
       }
    while(1);
return 0;   
}
//分析:告诉我们一个n后,我们就知道这个蛇形填数填到最后一个数必是n*n,
//所以循环的截止条件是<=n*n 。循环的过程是在一个二维数组中从起点开始向下走,
//到边界后又向左走,到边界后又向上走,再向右走,再循环下去。
//定义一个大的二维数组时,最好是定义到main()函数外,此题最好用memset()函数对数组进行初始化,每个数组成员赋初值0,
//这样可以在循环填数时,也作为一个边界条件。
//
0 0