六阶幻方怎么解
来源:学生作业帮助网 编辑:六六作业网 时间:2024/11/21 23:14:35
六阶幻方怎么解
六阶幻方怎么解
六阶幻方怎么解
不能被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)在同一列做对应交换(j
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((j
{
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幻方见幻立方体*。