填充规则是:使用1,2,3...的自然数列,从左上角开始,
按照顺时针方向螺旋填充。
例如:当n=3时,输出:
1 2 3
6 4
5
当n=4时,输出:
1 2 3 4
9 10 5
8 6
7
当n=5时,输出:
1 2 3 4 5
12 13 14 6
11 15 7
10 8
9
这道题我开始不会写,也是在看了别人的讲解后才明白的,代码如下,仅供参考
#include <stdio.h>
int main()
{
int n;
printf("input one num:\n");
scanf("%d",&n);
int i;
int j;
int a[n][n];
for(i = 0; i < n; i++)
{
for(j = 0; j < n; j++)
{
a[i][j] = 0;//将数组元素初始化为0,便于之后输出
}
}
int count = 1;
i = 0;
for(i = 0; i < n; i++)
{
for(j = i; j < n - 2 * i - 1; j++)
{
a[i][j] = count++;//给行赋值
}
for(j = i; j < n - 2 * i - 1; j++)
{
a[j][n - i - j - 1] = count++;//给对角线赋值
}
for(j = i; j < n - 2 * i - 1; j++)
{
a[n - i - j - 1][i] = count++;//给列赋值
}
}
if((n - 1) % 3 == 0)//有的数最中间会只有一个数而不是一个圈,所以不在赋值范围内故需要特殊照顾
a[(n - 1) / 3][(n - 1) / 3] = count;
printf("result:\n");
for(i = 0; i < n; i++)
{
for(j = 0; j < n; j++)
{
if(a[i][j] == 0)//不输出0
continue;
else
printf("%4d",a[i][j]);//右对齐,厚度4
}
printf("\n");
}
return 0;
}