分析:依次将1到N2填入矩阵,填入方法如下:
1个元素放在第0行的中间一列。
下一个元素放在当前元素的上一行、下一列。
如上一行、下一列已经填好,则下一个元素的填入位置为当前列下一行。
在找上一行、下一行或下一列时,必须把矩阵看成是回绕的。也就是说,如果当前行是最后一行时,下一行为第0行;当前行是第0行时,上一行为最后一行;当前列是最后一列时,下一列为第0列。
#include <stdio.h>
#define MAX 15
int main( )
{
int i, row, col, n, a[MAX][MAX]={ 0 };
scanf("%d",&n);
row=0; col=(n-1)/2; a[row][col]=1; // 填入1
for (i=2;i<=n*n;i++) // 依次填入2至n×n
{ if ( a[(row-1+n)%n][(col+1)%n]==0 ) // 如果下一个位置未填数
{ row=(row-1+n)%n; // 计算下一个位置的行号
col=(col+1)%n; // 计算下一个位置的列号
}
else row=(row+1)%n; // 如果已填数,下一个位置为当前行的下一列
a[row][col]=i; // 填入i
}
for (row=0; row<n; row++)
{ for (col=0; col<n; col++)
printf("%4d",a[row][col]);
printf("\n");
}
}
该博客介绍了如何将1到N²的数依次填入一个N×N的矩阵中,遵循特定的填充规则:从中间开始,按上一行下一列、当前列下一行的顺序填充,遇到已填位置则转到当前行的下一列。博主提供了C语言实现的代码示例,展示了矩阵填数的过程。
阶魔方&spm=1001.2101.3001.5002&articleId=128366803&d=1&t=3&u=5d450f7e4a87446ba644467b49bd103c)
505

被折叠的 条评论
为什么被折叠?



