C 语言实现回型矩阵

一、什么是回型矩阵?

比如这样的:

\begin{bmatrix} 1 & 2& 3& 4\\ 12& 13& 14& 5\\ 11& 16& 15& 6\\ 10& 9& 8& 7 \end{bmatrix}         \begin{bmatrix} 1& 2& 3& 4& 5\\ 16& 17& 18& 19& 6\\ 15& 24& 25& 20& 7\\ 14& 23& 22& 21& 8\\ 13& 12& 11& 10& 9 \end{bmatrix}

想必聪明的你已经找到规律了吧,那我就不在这里多说了

二、代码实现

#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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值