蛇形填数
时间限制: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
主要思路:
外循环表示要 填入多少数,就是n*n个数,循环n*n次
里面用四个循环 表示上下左右四条边,先初始化为0,然后按照判断条件进行填数
#include <stdio.h>
#include <string.h>
#define N 102
int main()
{
int a[N][N];
int n;
scanf("%d", &n);
memset(a,0,sizeof(a));
int k = n*n;
int i = 0, j = n-1, t = 1;
a[i][n-1] = t; // i = 0, j = n-1
while(k--)
{
while(1) // 右边
{
if (a[i+1][j] == 0 && i < n-1)
{
i++;
a[i][j] = ++t;
// printf("右a[%d][%d] = %d ",i ,j, a[i][j]);
}
else
{
break;
}
}
while(1) // 下边
{
if ( j > 0 && a[i][j-1] == 0)
{
j--;
a[i][j] = ++t;
// printf("下a[%d][%d] = %d ",i ,j, a[i][j]);
}
else
{
break;
}
}
while(1) // 左边
{
if(a[i-1][j] == 0 && i > 0)
{
i--;
a[i][j] = ++t;
// printf("左a[%d][%d] = %d ",i ,j, a[i][j]);
}
else
{
break;
}
}
while(1) // 上面
{
if (a[i][j+1] == 0 && j < n-1)
{
j++;
a[i][j] = ++t;
// printf("上a[%d][%d] = %d ",i ,j, a[i][j]);
}
else
{
break;
}
}
}
// printf("%d %d",a[])
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
{
printf("%d ",a[i][j]);
}
printf("\n");
}
return 0;
}