蛇形填数
时间限制: 3000ms
内存限制: 128000KB
64位整型: Java 类名:
题目描述
在n*n方陈里填入1,2,...,n*n,要求填成蛇形。例如n=4时方陈为:
10 11 12 1
9 16 13 2
8 15 14 3
7 6 5 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
来源
#include<stdio.h>#include<string.h>
int main()
{
int a[110][110],sum,i,j,s,k,n;
int book[110][110];
while(~scanf("%d",&n))
{
memset(book,0,sizeof(book));
k=n-1;sum=1; //正方形看成圈,k表示圈,
while(sum<=n*n) //四个for循环分别表示
{
for(i=0; i<n; i++) //右边,自上而下
if(book[i][k]==0)
{a[i][k]=sum++;book[i][k]=1;}
for(i=n-1;i>=0;i--) //下边 ,自右向左
if(book[k][i]==0)
{a[k][i]=sum++;book[k][i]=1;}
for(i=n-1;i>=0;i--) //左边 ,自下而上
if(book[i][n-k-1]==0)
{a[i][n-k-1]=sum++; book[i][n-k-1]=1;}
for(i=0;i<n;i++)
if(book[n-k-1][i]==0) //上边 ,自左向右
{ a[n-k-1][i]=sum++; book[n-k-1][i]=1;}
k--; //依次 剥减 向内
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
printf("%d ",a[i][j]);
printf("\n");
}
}
return 0;
}
// 仔细看规律 看数字是怎样依次向加