蛇形填数
时间限制:
3000 ms | 内存限制:
65535 KB
难度:
3
-
描述
-
在n*n方陈里填入1,2,...,n*n,要求填成蛇形。例如n=4时方陈为:
10 11 12 1
9 16 13 2
8 15 14 3
7 6 5 4
-
输入
- 直接输入方陈的维数,即n的值。(n<=100) 输出
- 输出结果是蛇形方陈。 样例输入
-
3
样例输出
-
7 8 1 6 9 2 5 4 3
这个题主要是格式问题了,对于格式的控制要精准,另外就是要注意,不能用EOF输入了,只有一组输入,否则会
OutputLimitExceeded |
思路就是模拟填数的过程,上到下,下到左,左到上,上到右。。。。。。重复过程
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int main()
{
int map[101][101],i,j,m,n,a,b,num;
memset(map,-1,sizeof(map));
num=1;
scanf("%d",&n);
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
map[i][j]=0;
i=0,j=n;
while(1)
{
if(num>n*n)
break;
else
while(map[i+1][j]==0)
map[++i][j]=num++;
if(num>n*n)
break;
else
while(map[i][j-1]==0)
map[i][--j]=num++;
if(num>n*n)
break;
else
while(map[i-1][j]==0)
map[--i][j]=num++;
if(num>n*n)
break;
else
while(map[i][j+1]==0)
map[i][++j]=num++;
}
for(i=1;i<=n;i++)
{
printf("%d",map[i][1]);
for(j=2;j<=n;j++)
printf(" %d",map[i][j]);
printf("\n");
}
return 0;
}