蛇形填数
时间限制: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
-
//把一个长方形分为5部分,从内到外依次填,太麻烦
-
#include #include int p[101][101],count; void Fill(int num,int begin ,int size){ if(size==1){ p[count][begin]=num; return; } if(size<1) return; int i,hang=count,lie=begin; p[count][lie]=num;num++; for(i=0;i { hang++; p[hang][lie]=num;num++; } for(i=0;i { lie--; p[hang][lie]=num;num++; } lie--; for(i=0;i p[hang][lie]=num;num++; hang--; } for(i=0;i p[hang][lie]=num;num++; lie++; } count++; Fill(num,lie-1,size-2);
-
} int main(){ int size,i,j; while(~scanf("%d",&size)){ count=0; Fill(1,size-1,size); for(i=0;i for(j=0;j printf("%d\t",p[i][j]); printf("\n"); } } return 0; }
-
//循环来做,比较快速
#include
int
main()
{
int
a[101][100]={0};
int
i,j,k;
int
n,num,x,y;
num=1;
scanf
(
"%d"
,&n);
a[x=1][y=n]=1;
while
(num
{
while
(x+1<=n&&!a[x+1][y]) a[++x][y]=++num;
while
(y-2>=0&&!a[x][y-1]) a[x][--y]=++num;
while
(x-2>=0&&!a[x-1][y]) a[--x][y]=++num;
while
(y+1<=n&&!a[x][y+1]) a[x][++y]=++num;
}
for
(i=1;i<=n;i++)
{
for
(j=1;j<=n;j++)
printf
(
"%d "
,a[i][j]);
printf
(
"\n"
);
}
return
0;
}