蛇形填数

描述:输入  1 

            2

             3

输出             1

                      1    2

                      4    3

                     1     2     3

                     8     9     4

                     7     6     5


           想起上学期第一次看到这题时完完全全下手无策,今天忽然又在书上看见,于是完全自主写了一遍,一遍就成功,看来自己真的进步了

#include <stdio.h>
#include <string.h>
int main()
{
    int a[20][20];
    int i, j;
    int n;
    int total;
    while(scanf("%d", &n)&&n)
    {
        memset(a, 0, sizeof(a));
        total=1;
        i=j=0;

        while(total<=n*n)
        {
           while(!a[i][j]&&j<n)  a[i][j++]=total++;
           j--;
           i++;

           while(!a[i][j]&&i<n)  a[i++][j]=total++;
           i--;
           j--;

           while(!a[i][j]&&j>=0) a[i][j--]=total++;
           j++;
           i--;

           while(!a[i][j]&&i>=0) a[i--][j]=total++;
           i++;
           j++;
        }

        for(i=0;i<n;i++)
        {
            for(j=0;j<n;j++)
                printf("%3d  ", a[i][j]);
            printf("\n");
        }
    }

    return 0;
}

你可能感兴趣的:(ACM,水题,蛇形填数)