六阶幻方怎么解

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/07 00:43:38
六阶幻方怎么解

六阶幻方怎么解
六阶幻方怎么解

六阶幻方怎么解
不能被4整除的偶阶幻方叫单偶幻方,如6阶、10阶、14阶等.
将n阶单偶幻方表示为4m+2阶幻方.将其等分为四分,成为如下图所示A、B、C、D四个2m+1阶奇数幻方.
A C
D B
A用1至2m+1填写成(2m+1)2阶幻方;B用(2m+1)2+1至2*(2m+1)2填写成2m+1阶幻方;C用2*(2m+1)2+1至3*(2m+1)2填写成2m+1阶幻方;D用3*(2m+1)2+1至4*(2m+1)2填写成2m+1阶幻方;
【注:(2m+1)2是(2m+1)的平方,以下同】
8\x091\x096\x0926\x0919\x0924
3\x095\x097\x0921\x0923\x0925
4\x099\x092\x0922\x0927\x0920
35\x0928\x0933\x0917\x0910\x0915
30\x0932\x0934\x0912\x0914\x0916
31\x0936\x0929\x0913\x0918\x0911
在A每行取m个小格(中心格及一侧对角线格为必换格,其余m-1格只要不是另一侧对角线格即可),也就是说在A中间一行取包括中心格在内的m个小格,其他行左侧边缘取m个小格,将其与D相应方格内交换;B与C任取m-1列相互交换.
6阶幻方就是4*1+2,那么m就是1.在A中间一行取中心格1个小格,其他行左侧边缘取1个小格,将其与D相应方格内交换;B与C接近右侧m-1列相互交换(6阶幻方m-1=0,则不用互换).如下图用Strachey法生成的6阶幻方:
35\x091\x096\x0926\x0919\x0924
3\x0932\x097\x0921\x0923\x0925
31\x099\x092\x0922\x0927\x0920
8\x0928\x0933\x0917\x0910\x0915
30\x095\x0934\x0912\x0914\x0916
4\x0936\x0929\x0913\x0918\x0911
每一行,每一列,对角线的和值(称为幻和值)为111.
一个n阶幻方幻和值公式为:
Nn=1/2xn(n2+1)
【注:n2是n的平方】
N6=1/2x6x(36+1)=111
只要是幻方,无论是几阶,我都能算出.你要有兴趣可随时找我切磋.

下面是六阶幻方的其中一个答案:

=================================================

28 4 3 31 35 10

36 18 21 24 11 1

7 23 12 17 22 30

8 13 26 19 16 29

5 2...

全部展开

下面是六阶幻方的其中一个答案:

=================================================

28 4 3 31 35 10

36 18 21 24 11 1

7 23 12 17 22 30

8 13 26 19 16 29

5 20 15 14 25 32

27 33 34 6 2 9



注意:这个幻方的每行每列对角线的六个数之和为111(幻和为111),还有一个特点就是中间的十六个数也构成一个四阶幻方哦,幻和为74。希望满意答案。



=====================================================================

下面介绍一下奇数幻方,双偶,单偶幻方的常见规律。

一、 N 为奇数时,最简单。

(1) 将1放在第一行中间一列;

(2) 从2开始直到n×n止各数依次按下列规则存放:

按 45°方向行走,如向右上

每一个数存放的行比前一个数的行数减1,列数加1

(3) 如果行列范围超出矩阵范围,则回绕。

例如1在第1行,则2应放在最下一行,列数同样加1;

(4) 如果按上面规则确定的位置上已有数,或上一个数是第1行第n列时,

则把下一个数放在上一个数的下面。

============================

二、 N为4的倍数时

采用对称元素交换法。

首先把数1到n×n按从上至下,从左到右顺序填入矩阵

然后将方阵的所有4×4子方阵中的两对角线上位置的数关于方阵中心作对

称交换,即a(i,j)与a(n-1-i,n-1-j)交换,所有其它位置上的数不变。

(或者将对角线不变,其它位置对称交换也可)

===========================

三、N 为其它偶数时

当n为非4倍数的偶数(即4n+2形)时:首先把大方阵分解为4个奇数(2m+1阶)子方阵。

按上述奇数阶幻方给分解的4个子方阵对应赋值

上左子阵最小(i),下右子阵次小(i+v),下左子阵最大(i+3v),上右子阵次大(i+2v)

即4个子方阵对应元素相差v,其中v=n*n/4

四个子矩阵由小到大排列方式为 ① ③

④ ②

然后作相应的元素交换:a(i,j)与a(i+u,j)在同一列做对应交换(jn-t+2),

a(t-1,0)与a(t+u-1,0);a(t-1,t-1)与a(t+u-1,t-1)两对元素交换

其中u=n/2,t=(n+2)/4 上述交换使每行每列与两对角线上元素之和相等。





=================================================================



下面给出C语言编程实现任意幻方的

========================

#include"stdio.h"

#include"math.h"

int a[256][256];

int sum;

int check();

void ins(int n);

main()

{

int i,j,n,k,t,p,x;

scanf("%d",&n);

sum=(n*n+1)*n/2;

if(n%2==1)//奇数幻方

{

ins(n);

k=n;

}

if(n%4==2)//单偶数幻方

{

k=n/2;

ins(k);

for(i=0;i
for(j=0;j
{

a[j+k]=a[j]+2*k*k;

a[i+k][j]=a[j]+3*k*k;

a[i+k][j+k]=a[j]+k*k;

}

t=(n-2)/4;

for(i=0;i
for(j=0;j
{

if((j
{

p=a[j];a[j]=a[i+k][j];a[i+k][j]=p;

}

if((jk-t-1))

{

p=a[j];a[j]=a[i+k][j];a[i+k][j]=p;

}

if((i>=t&&i<=k-t-1)&&(j>=t&&j
{

p=a[j];a[j]=a[i+k][j];a[i+k][j]=p;

}

if(j>1&&j<=t)

{

p=a[j+k];a[j+k]=a[i+k][j+k];a[i+k][j+k]=p;

}

}

}

if(n%4==0)//双偶数幻方

{

x=1;

for(i=0;i
for(j=0;j
a[j]=x++;

for(i=0;i
for(j=0;j
{

if(i%4==0&&abs(i-j)%4==0)

for(k=0;k<4;k++)

a[i+k][j+k]=n*n-a[i+k][j+k]+1;

else if(i%4==3&&(i+j)%4==3)

for(k=0;k<4;k++)

a[i-k][j+k]=n*n-a[i-k][j+k]+1;

}

}

if(check(n)==1)

{

for(i=0;i
{

for(j=0;j
printf("%5d",a[j]);

printf("\n");

}

return ;

}

}

int check(int n)//检验是否是幻方

{

int i,j,sum1=0,sum2;

for(i=0;i
{

for(j=0;j
sum1+=a[j];

if(sum1!=sum) return 0;

sum1=0;

}

for(i=0;i
{

for(j=0;j
sum1+=a[j];

if(sum1!=sum) return 0;

sum1=0;

}

for(sum1=0,sum2=0,i=0,j=0;i
{

sum1+=a[j];

sum2+=a[n-j-1];

}

if(sum1!=sum) return 0;

if(sum2!=sum) return 0;

else return 1;

}

void ins(int n)//单偶数幻方的输入

{ int x,y,m;

x=0;y=n/2;

for(m=1;m<=n*n;m++)

{

a[x][y]=m;

if (m%n!=0)

{

x--;y++;

if(x<0) x=x+n;

if(y==n) y=n-y;

}

else

{

x++;

if(x==n) x=x-n;

}

}

}



=====================================

说明:以上C语言程序,复制到TXT文本,然后,另存为XXX.c文件,利用编程软件,编译这个文件,再保持到电脑,以后想用,直接点击就会运行。运行后,可以随意输入一个幻方阶数,就会自动生成一个幻方组合出来。

再说明一点:以上C程序仅供参考,我刚才编译过,因为是中文输入法输入的,所以不通过,需要把上边的标点符号切换到英文输入法,再输入才可以通过编译。



以下程序是可以通过编译,只是奇数幻方的C程序,还有,我命令它阶数范围是1~15阶的奇数幻方。

==================================

#include "stdio.h"
void main()
{
int a[18][18],i,j,k,p,n;

p=1;
while(p==1)

{
printf("Enter n(n=1 to
15):");

scanf("%d",&n);

if(n!=0 && n<=17 &&
n%2!=0)

p=0;

}


for(i=1;i<=n;i++)
for(j=1;j<=n;j++)

a[i][j]=0;

j=n/2+1;

a[1][j]=1;

for(k=2;k<=n*n;k++)
{
i--;
j++;
if(i<1 && j>n)
{
i+=2;
j--;
}
else
{
if(i<1) i=n;

if(j>n) j=1;
}

if(a[i][j]==0)
a[i][j]=k;
else
{
i+=2;
j--;
a[i][j]=k;
}
}

/*输出幻方阵*/
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
printf("%3d ",a[i][j]);
printf("\n");
}

system("pause");
}

==================================



第一:奇数幻方利用“楼梯法”和“杨辉法”很简单就能制作出来,可能上面描述的单偶,双偶幻方不是很详细,你可以上网查找一下相关资料,都会有图文解说的,很直观,规律看起来也很简单。



第二:关于编程可以解出幻方,可以进行了解,但是可不能一直只利用它哦,得自己琢磨推算幻方,例如利用推理法也可以把所有的幻方推算出来,这样才能更好地学习(我不用上面的规律也可以把任何一个幻方都推算出来,当然,高次幻方就相对比较难了)。

收起

您好,真想详细回答您的问题,可是现在没电脑,不过你可以得到比任何回答更详细的答案,不妨百度搜索一下:单偶幻方的解法。因为六阶,十阶,十四…阶是单偶幻方。
扩展:搜双偶幻方可知道四、八、十二…阶的解法哦。
希望满意!
参考一下这里:http://wenwen.soso.com/z/q279338502.htm...

全部展开

您好,真想详细回答您的问题,可是现在没电脑,不过你可以得到比任何回答更详细的答案,不妨百度搜索一下:单偶幻方的解法。因为六阶,十阶,十四…阶是单偶幻方。
扩展:搜双偶幻方可知道四、八、十二…阶的解法哦。
希望满意!
参考一下这里:http://wenwen.soso.com/z/q279338502.htm

收起

童真白马补充:例如:http://zhidao.baidu.com/question/132543727.html?an=0&si=2

n2个自然数所排成的一种n行n列的方阵,其中各行、各列及对角线上各数之和都相等。n称为阶。......的应用。例如,程序设计的方法与技巧,可以从讨论幻方的构成中得到启发。幻方492357816幻方见幻立方体*。