一、什么是回型矩阵?
比如这样的:
想必聪明的你已经找到规律了吧,那我就不在这里多说了
二、代码实现
#include <stdio.h>
int main()
{
int n = 0;
scanf("%d", &n);
int arr[20][20] = { 0 };
int x = 0, y = 0;
int a = 0, b = n - 1, c = n - 1, d = -1;
int i = 1;
while (i <= (n*n))
{
arr[x][y] = i;
i++;
if (x == a && y < b)
{
if (y == d)
{
c--;
}
y++;
}
else if (y == b && x < c)
{
if (x == a)
{
d++;
}
x++;
}
else if (x == c && y > d)
{
if (y == b)
{
a++;
}
y--;
}
else if (y == d && x >a)
{
if (x == c)
{
b--;
}
x--;
}
}
for (int r = 0; r < n; r++)
{
for (int j = 0; j < n; j++)
{
printf("%d ", arr[r][j]);
}
printf("\n");
}
return 0;
}
运行结果如下:
三、细节讲解
1.参数
(1) x,y 代表着矩阵的行和列
(2) a,b,c,d 分别代表着不同的标志针,如图:
2.过程
(1)基本框架
当x == a时,y++;
当y == b时,x++;
当 x == c时 ,y--;
当 y == d时, x--;
(2)a,b,c,d 的变化
显然,abcd是要时刻变化的,如果当 x == a , y == b时 a ++ , 那么下一次循环的时候 x 又等于 a了 ,所以我们选择岔开,将abcd的变化延迟到下一次方向改变
(3)四个角的处理
当 在 x == a 的情况下,y == b的情况下y++,会导致y指向矩阵外民,因此,判定的条件要变为 x == a && y < b