第二天:回形矩阵(c语言)

第二天:回形矩阵(c语言),第1张

 

🔍 🔍 没有比脚更长的路,没有比人更高的山。


         ————汪国真《山高路远》


(如有不足,望留言,定改正)

 😇  😇 今天要向小伙伴们介绍的是回形矩阵

 🏀 🏀  什么是回形矩阵呢?如下图:

回形矩阵:矩阵里面的元素从1开始按照回形路径逐渐增大。


⚽️⚽️  那我们要如何用c语言来实现它呢?

 🌵 首先我们第一步想到的就是用二维数组来进行模拟。


 🌴 然后我们该如何按照顺序一步一步的输入自增元素呢?

        循环!!

 🌳 其实我们可以仔细观察:(如下图)

图中标识为1,2,3,4的元素个数相同 ,同时都是按照递增输入的。


于是我们大致可以知道需要使用一个外层循环四个内层循环来实现,外层控制回形圈数,内层就用来输入。


特殊情况: 🌱 (1).当矩阵只有一个元素

                               判断后赋值。


                   🌱 (2).当矩阵阶数为奇数

                               判断后为中心赋值。



代码如下:

#include
#include
int main() {
    //先创建一个二维数组
    int k, arr[20][20];

    //给数组进行初始化
    memset(arr, 0, sizeof(arr));

    //count用来给数组输入元素
    int  count = 1;

    //k为矩阵的阶数
    scanf("%d", &k);

    //定义i和j来限定数组的边界
    int j = k, i = 0;

    //如果k==1,一阶矩阵
    if (k == 1)
    {
        arr[0][0] = 1;
    }

    else {
        //k!=1时
        //外层循环条件 

        while (count <= k * k)
        {
            //定义变量m,n来保存作为矩阵的下标
            int m = i, n = i;

            if (i < k)
            { //k是数组的边界
                 //上层从n==0开始,m不变,直到n==j-2

                for (n = i; n < j - 1; n++)
                {
                    arr[m][n] = count++;
                }

                //右层从m==0开始,n不变,直到m==j-2
                for (m = i; m < j - 1; m++)
                {
                    arr[m][n] = count++;
                }

                //下层从n==n-2开始,m不变,直到n==i+1
                for (n = j - 1; n > i; n--)
                {
                    arr[m][n] = count++;
                }

                //左层从m==n-2开始,n不变,直到m==i+1
                for (m = j - 1; m > i; m--)
                {
                    arr[m][n] = count++;
                }

            }
            //对边界值进行修改
            j--, i++;
            //如果矩阵的阶数为奇数,则要给矩阵正中心赋值
            //条件为k%2为1且i==j-1.

            if (i == j - 1 && k % 2 == 1)
            {
                arr[i][i] = count++;
            }
        }
    }
    //对二维数组进行打印

    for (int p = 0; p < k; p++)
    {
        for (int q = 0; q < k; q++)
        {
            printf("%d\t", arr[p][q]);
        }
        printf("\n\n");
    }
    return 0;
}

✈️ ✈️ 今天的内容到这里就为止了,希望小伙伴们可以在评论区里提提建议,在下感激不尽!! ​​​​​​​ 

 

 😎  😎  愿与诸君共勉!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/568971.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-09
下一篇 2022-04-09

发表评论

登录后才能评论

评论列表(0条)

保存