🔍 🔍 没有比脚更长的路,没有比人更高的山。
————汪国真《山高路远》
(如有不足,望留言,定改正)
😇 😇 今天要向小伙伴们介绍的是回形矩阵:
🏀 🏀 什么是回形矩阵呢?如下图:
回形矩阵:矩阵里面的元素从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;
}
✈️ ✈️ 今天的内容到这里就为止了,希望小伙伴们可以在评论区里提提建议,在下感激不尽!!
😎 😎 愿与诸君共勉!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)