2021-03-27

本文介绍了奇数魔方阵(幻方阵)的构造算法,从数字1开始放置在第一行中间,然后按照环形规则填充其余数字。当遇到已填充的位置时,将数字放置在上一行的同一列或下一行的前一列。提供三种环形处理的方法,并给出了一段C语言实现的代码示例。
摘要由CSDN通过智能技术生成

魔方(幻方)阵

解题思路:
魔方阵,又称幻方阵,是指组成元素为自然数 1、2,3…n^2 的 n×n 的方阵,其中每个元素值都不相等,且每行、每列以及主、副对
角线上各 n 个元素之和都相等。
对于 n 为奇数的魔方阵,算法描述如下:
1、数字 1 方阵方阵第一行的中间;
2、当前数字放在前一个数字的上一行,后一列,注意如果已经到
顶行则上一行为最后一行即把线性的看着环形的,列同样处理。
3、如果当前位置已经有数据,则放在前一个数字的下一行,同
列。
考点:
1、了解过魔方阵。
2、根据魔方阵的算法描述可以用编程语言实现。

//该函数只适合奇数的魔方阵
void MagicMatrix()
{
#define ROW 3
#define COL ROW
int arr[ROW][COL] = {0};
assert(ROW%2 != 0);//保证是奇数
int curRow = 0;
int curCol = COL/2;
arr[curRow][curCol] = 1;
for(int i=2; i<=ROW*COL; i++)
{
//线性数组进行环形处理,上一行,后一列。行和列的处理方式类
似,下面演示行的处理

//方法 1
curRow–;//
if(curRow < 0)
{
curRow = ROW-1;
}

//方法 2
//curRow = (curRow==0) ? ROW-1 : curRow-1;

//方法 3
//curRow = (curRow-1+ROW)%ROW;
///以上是三中环形处理的办法
curCol = (curCol+1)%COL;
if(arr[curRow][curCol] != 0)//已经有值
{
curRow = (curRow+2)%ROW;
curCol = (curCol-1+COL)%COL;

}
arr[curRow][curCol] = i;
}
for(int i=0;i<ROW;i++)
{
for(int j=0;j<COL;j++)
{
printf("%2d “,arr[i][j]);
}
printf(”\n");
}}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值