蛇形数

Description:

  将数列1.2,3,……,n*n,依次按蛇形方式存在二维数组A[1..n,1..n]中。

Input:

输入有多组数据,每组数据为一个整数n,( 0< n < 30 )以EOF结束。

Output:

按照样例格式打印出每组蛇形数,每个数据占有四个域宽,两个数据之间没有空格隔开。两组数据之间有一个换行。

Sample Input:

1
4
5

Sample Output:

 1

   1   2   6   7
   3   5   8  13
   4   9  12  14
  10  11  15  16

   1   2   6   7  15
   3   5   8  14  16
   4   9  13  17  22
  10  12  18  21  23
  11  19  20  24  25

#include<stdio.h>
int p[31][31];
int main()
{
 int n,i,j,x,y,m,ca=0;
 while(scanf("%d",&n)!=EOF)
 {
  if(ca) printf("\n");
  ca++;
  i=1;j=1;
  m=1;
  p[i][j]=1;
  if(n>1)
  {
   for(x=2;x<=n;x++)
   {
    if(!(x&1))
    {
     p[i][++j]=++m;
     for(y=2;y<=x;y++)
     {
      p[++i][--j]=++m;
     }
    }
    else
    {
     p[++i][j]=++m;
     for(y=2;y<=x;y++)
     {
      p[--i][++j]=++m;
     }
    }
   }
   for(x=n+1;x<=2*n-1;x++)
   {
                if(x&1)
    {
     p[i][++j]=++m;
     for(y=x+1;y<=2*n-1;y++)
     {
      p[--i][++j]=++m;
     }
    }
    else
    {
     p[++i][j]=++m;
     for(y=x+1;y<=2*n-1;y++)
     {
      p[++i][--j]=++m;
     }
    }
   }
  }
  for(i=1;i<=n;i++)
  {
   for(j=1;j<=n;j++)
   {
    printf("%4d",p[i][j]);
   }
   printf("\n");
  }
 }
 return 0;
}
posted @ 2013-05-07 10:45  forevermemory  阅读(359)  评论(0编辑  收藏  举报