蛇形填数

来源:互联网 发布:徐老师的淘宝店叫什么 编辑:程序博客网 时间:2024/06/05 10:50

问题描述:根据输入的n,打出一个N*N的蛇形数

例如,4*4的

10 11 12 1

9  16 13 2

8  15 14 3

7  6   5  4

思路:就是把1~n*n的数填到一个二维数组里,从a[0][n-1]的位置开始填,先向下,直到超界或者下一个位置已经有数了,才开始转变方向。


#include<stdio.h>
#include<string.h>
int main()
{
  int n,a[100][100];
  int x,y,m;
  memset(a,0,sizeof(a));
  scanf("%d",&n);
  x=0;
  y=n-1;
  m=a[x][y]=1;
  while(m<n*n)
  {
    while(x+1<n&&!a[x+1][y])
        a[++x][y]=++m;
    while(y-1>=0&&!a[x][y-1])
        a[x][--y]=++m;
    while(x-1>=0&&!a[x-1][y])
        a[--x][y]=++m;
    while(y+1 &&!a[x][y+1])
        a[x][++y]=++m;
  }
   for(x=0;x<n;x++)
   {
     for(y=0;y<n;y++)
        printf("\t%d",a[x][y]);
     printf("\n");
   }
   return 0;
}
0 0
原创粉丝点击