//不能这样写 while(x<n-1&&(map[++x][y]!=0))map[x][y]=++total;
//如果map[++x][y]!=0,那么 x的值 已经改变;会使下面的循环 不能执行;
代码:
#include <stdio.h>
#include <string.h>int main()
{
int map[102][102];
int x,y,total,n;
scanf("%d",&n);
memset(map,0,sizeof(map));
//注意 上下两句不能颠倒!!!
map[x=0][y=n-1]=1;
total=1;
while(total<n*n)
{
while(x<n-1&&!map[x+1][y])map[++x][y]=++total;
//不能这样写 while(x<n-1&&(map[++x][y]!=0))map[x][y]=++total;
//如果map[++x][y]!=0,那么 x的值 已经改变;
while(y>0 && !map[x][y-1]) map[x][--y]=++total;
while(x>0 && !map[x-1][y]) map[--x][y]=++total;
while(y<n-1 && !map[x][y+1])map[x][++y]=++total;
}
for(x=0;x<n;x++)
{
for(y=0;y<n-1;y++)
printf("%d ",map[x][y]);
printf("%d\n",map[x][y]);
}
return 0;
}