打印魔方阵,首先我们得知道魔方阵的编写规律:
魔方阵的填充规律如下:
假设当前创建了一个矩阵:
int matrix[16][16];
- 第一步,我们知道了,1是放在第一行中间一列,那么我们就可以在矩阵中放入1所在的位置
int mid = n / 2;
matrix[0][mid] = 1;
- 第二步,我们知道:最后一行的中间数字为n^2,其右边为2
matrix[n - 1][mid] = n * n;
matrix[n - 1][mid + 1] = 2;
- 第三步,我们根据规律,使用if…else if…else语句进行不同条件的判断,对其实现不同的处理操作即可
注意事项:
1)用一个while循环进行矩阵的填充,因为1,2以及n^2 都已经填入,因此我们只要循环到3~n^2-1也填入矩阵中即可
2)除了当前元素处在第一行的最后一列以外,其它情况每次填充前都需要判断条件④中的④若按照上述规则确定的位置上已经放置有数,则下一位放在其下面,即[row + 1][column]
int finalNum = n * n - 1;
int curNumber = 3;
int row = n - 1;
int column = mid + 1;
while (curNumber <= finalNum)
{
if (row == 0 && column == n - 1)
{
row += 1;
matrix[row][column] = curNumber++;
}
else if (row == 0 && column!=n-1)
{
if (matrix[n-1][column+1] != 0)
{
row += 1;
}
else
{
row = n - 1;
column += 1;
}
matrix[row][column] = curNumber++;
}
else if (column == n - 1 && row!=0)
{
if (matrix[row-1][0] != 0)
{
row += 1;
}
else
{
row -= 1;
column = 0;
}
matrix[row][column] = curNumber++;
}
else
{
if (matrix[row-1][column+1] != 0)
{
row += 1;
}
else
{
row -= 1;
column += 1;
}
matrix[row][column] = curNumber++;
}
}
源代码:
#include<stdio.h>
int matrix[16][16];
void printMagicSquare(int n);
void printMatrix(int n);
int main()
{
int n;
printf("请输入一个奇数:");
scanf_s("%d", &n);
printf("打印%d阶魔方阵为:\n",n);
printMagicSquare(n);
system("pause");
}
void printMagicSquare(int n)
{
int mid = n / 2;
matrix[0][mid] = 1;
matrix[n - 1][mid] = n * n;
matrix[n - 1][mid + 1] = 2;
int finalNum = n * n - 1;
int curNumber = 3;
int row = n - 1;
int column = mid + 1;
while (curNumber <= finalNum)
{
if (row == 0 && column == n - 1)
{
row += 1;
matrix[row][column] = curNumber++;
}
else if (row == 0 && column!=n-1)
{
if (matrix[n-1][column+1] != 0)
{
row += 1;
}
else
{
row = n - 1;
column += 1;
}
matrix[row][column] = curNumber++;
}
else if (column == n - 1 && row!=0)
{
if (matrix[row-1][0] != 0)
{
row += 1;
}
else
{
row -= 1;
column = 0;
}
matrix[row][column] = curNumber++;
}
else
{
if (matrix[row-1][column+1] != 0)
{
row += 1;
}
else
{
row -= 1;
column += 1;
}
matrix[row][column] = curNumber++;
}
}
printMatrix(n);
}
void printMatrix(int n)
{
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
printf("%d ", matrix[i][j]);
}
printf("\n");
}
}
运行结果:
欢迎友好的指正。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)