博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
魔方阵
阅读量:5232 次
发布时间:2019-06-14

本文共 936 字,大约阅读时间需要 3 分钟。

魔方阵也叫幻方纵横图是指组成元素为自然数1、2、…、n2的平方的n×n方阵,1~n中的每个数都会出现在元素中,且不重复出现,且每行每列以及主、副对角线上各n个元素之和都相等。

根据魔方阵的阶数,魔方阵分为,奇数阶魔方阵双偶数阶魔方阵单偶数阶魔方阵。(奇数阶指的是从3开始的奇数,双偶数指的是能被4整除的偶数,单偶数指的是从2开始的偶数能被2整除而不能被4整除的数;用公式来表示就是2k+1,k=1,3,...;4k,k=1,2...;2k,k=1,3...;)

 

奇数阶魔方阵

奇数阶魔方阵只有一个

 

规律

1. 第一行的中间位置为1。

2. 数字a所在的位置为a-1的位置上移,右移。

3. 当a-1在第一行时,a在最后一行;当a-1在最后一列时,a在第一列。

4.若a-1的元素值为n的倍数,则a所在的位置为a-1的位置下移。

 

填充思路

1. 令第一行中间的元素为1。

2. 沿着副对角线填充元素。

3. 若行数超出二维数组范围,初始化行到最后一行。

4. 若列数超出二维数组范围,初始化列到第一列。

6.若要填充的位置已有值,行数加一,列数不变。

 

c语言实现

实现奇数阶魔方阵的算法有很多,这里仅仅是其中一种。算法核心有轮回结构,以及判断下一个位置是否有数值。本算法用的是当型轮回结构;巧妙地运用了当m为阶数的倍数时,下一个位置肯定已经填充过数值的的规律,来判断下一个位置是否有数值。

0 //m代表1~n2的自然数 n为阶数 i为行数 j为列数  1 for(int m=1;m<=n*n;)                           //从1开始遍历 2     { 3         if(m>=n&&m%n==0)                        //若m为阶数的倍数 4         { 5             if(i>=0&&i
=0&&j
=0&&i
=0&&j

 

双偶数阶魔方

双偶数阶魔方

转载于:https://www.cnblogs.com/jawide/p/10549178.html

你可能感兴趣的文章