蛇形填数

来源:互联网 发布:sql三表联合查询 编辑:程序博客网 时间:2024/05/11 22:04
/*输入: 1234567输出:     1        4    1    3    2        7    8    1    6    9    2    5    4    3       10   11   12    1    9   16   13    2    8   15   14    3    7    6    5    4       13   14   15   16    1   12   23   24   17    2   11   22   25   18    3   10   21   20   19    4    9    8    7    6    5       16   17   18   19   20    1   15   30   31   32   21    2   14   29   36   33   22    3   13   28   35   34   23    4   12   27   26   25   24    5   11   10    9    8    7    6      19   20   21   22   23   24    1   18   37   38   39   40   25    2   17   36   47   48   41   26    3   16   35   46   49   42   27    4   15   34   45   44   43   28    5   14   33   32   31   30   29    6   13   12   11   10    9    8    7*///#define LOCAL#include <stdio.h>#include <string.h> const int MAXN=500;int main(){#ifdef LOCALfreopen("in.txt","r",stdin); freopen("out.txt","w",stdout);#endifint n,t=0;int b[MAXN][MAXN],m,c=1;int i,j;while(scanf("%d",&m)!=EOF){memset(b,0,sizeof(b));i=0;j=m-1;c=b[i][j]=1;while(c<m*m){while(i+1<m && !b[i+1][j]) b[++i][j]=++c;while(j-1>=0 && !b[i][j-1]) b[i][--j]=++c;while(i-1>=0 && !b[i-1][j]) b[--i][j]=++c;while(j+1<m && !b[i][j+1]) b[i][++j]=++c;/*如果为c++,同样循环条件下,最后一个会为0; while(i+1<m && !b[i+1][j]) b[++i][j]=c++;while(j-1>=0 && !b[i][j-1]) b[i][--j]=c++;while(i-1>=0 && !b[i-1][j]) b[--i][j]=c++;while(j+1<m && !b[i][j+1]) b[i][++j]=c++;*/}for(i=0;i<m;i++){for(j=0;j<m;j++){printf("%5d",b[i][j]);}printf("\n");}}return 0;}

0 0