目录
问题说明
如下图所示,小明用从1 开始的正整数“蛇形”填充无限大的矩阵。
容易看出矩阵第二行第二列中的数是5。请你计算矩阵中第20 行第20 列的数是多少?
设计思路
1、仔细观察矩阵可以发现,数组从左上角沿对角线按“s”形进行填数。
2、当行列序号和为奇数时,填数路径向左下移动;当行列序号和为偶数时,填数路径向右上移动。
3、当超出边界时,在上方超出,则向下平移一格;在左边超出,则向右平移一格。
程序代码
#include <stdio.h>
int main()
{
int i = 0, j = 0;
int n;
int ans = 1;
int a[100][100];
scanf("%d", &n);
//填充数组
for (; i+j < 2*n-1;)
{
if ((i+j)%2 == 0) //判断填数方向
{
a[i][j] = ans++;
i--;
j++;
if (i < 0) //判断是否到达上边界
{
i = 0;
}
}
else
{
a[i][j] = ans++;
i++;
j--;
if (j < 0) //判断是否到达下边界
{
j = 0;
}
}
}
//打印数组
for (i = 0; i < 2*n-1; i++)
{
for (j = 0; j < 2*n-1; j++)
{
printf("%5d", a[i][j]);
}
printf("\n");
}
printf("第%d行第%d列的数值为%d", n, n, a[n-1][n-1]);
return 0;
}