精华内容
下载资源
问答
  • 偶数阶幻方

    2012-09-26 22:26:28
    解决经典的偶数阶幻方问题,本程序利用C语言编写,阶数可由用户 指定
  • matlab实现双偶数阶幻方的代码,有详细的说明,希望可以帮助到你。
  • 偶数阶幻方

    千次阅读 2016-09-03 14:30:16
    偶数阶幻方 说实话,偶数阶幻方我一直以为只有一种,就是2*n阶幻方问题。查了一下才知道偶数阶幻方也分为两小类。①.4*n阶幻方 4*n阶幻方的生成其实很简单,即对方格中对角线上的数据,先以一条对角线(称对角线...

    .偶数阶幻方
    说实话,偶数阶幻方我一直以为只有一种,就是2*n阶幻方问题。查了一下才知道偶数阶幻方也分为两小类。

    先看看4阶幻方的填法:将数字从左到右、从上到下按顺序填写:

    1 2 3 4
    5 6 7 8
    9 10 11 12
    13 14 15 16

    将对角线上的数字,换成与它互补的数字。
    这里,nn+1 = 44+1 = 17;
    把1换成17-1 = 16;把6换成17-6 = 11;把11换成17-11 = 6……换完后就是一个四阶幻方。

    16 2 3 13
    5 11 10 8
    9 7 6 12
    4 14 15 1

    对于n=4k阶幻方,我们先把数字按顺序填写。写好后,按44把它划分成kk个方阵。因为n是4的倍数,一定能用44的小方阵分割。然后把每个小方阵的对角线,象制作4阶幻方的方法一样,对角线上的数字换成互补的数字,就构成幻方。 下面是8阶幻方的作法:
    (1) 先把数字按顺序填。然后,按4
    4把它分割成2*2个小方阵

    1 2 3 4 5 6 7 8
    9 10 11 12 13 14 15 16
    17 18 19 20 21 22 23 24
    25 26 27 28 29 30 31 32
    33 34 35 36 37 38 39 40
    41 42 43 44 45 46 47 48
    49 50 51 52 53 54 55 56
    57 58 59 60 61 62 63 64

    (2) 每个小方阵对角线上的数字,换成和它互补的数。

    64 2 3 61 60 6 7 57
    9 55 54 12 13 51 50 16
    17 47 46 20 21 43 42 24
    40 26 27 37 36 30 31 33
    32 34 35 29 28 38 39 25
    41 23 22 44 45 19 18 48
    49 15 14 52 53 11 10 56
    8 58 59 5 4 62 63 1

    好了,4*n阶幻方也完了,怎么样,简单吧!自己动手试试吧。

    ②.4n+2阶幻方
    4
    n+2,乍一看就较4n麻烦了,事实也是如此,不过它的思想也简单。就是将4n+2看做2*(2n+1),这样一来就转化成了四个2n+1求幻方。
    附注:下面的我以6阶幻方为例,那么,4*n+2=6,所以n=1。

    我通过描述每个步骤加上图形的方式来表述4*n+2阶幻方实现的过程。

    第一步:把整个表格分成4个(2n+1)(2*n+1)的小表格,分别叫A,B,C,D。见下图

    这里写图片描述

    第二步:这样A,B,C,D个小表格就成奇数幻方问题了。
    ①.将1,2,…,(2n+1)(2n+1)这些数划分给A,并对A实现奇数幻方;
    ②.将(2
    n+1)(2n+1)+1,…,2*(2n+1)(2n+1)这些数划分给B,并对B实现奇数幻方;
    ③.将2
    (2n+1)(2n+1)+1,…3(2n+1)(2n+1)这些数划分C,并对C实现奇数幻方;
    ④.将3
    (2n+1)(2n+1)+1,…4(2n+1)(2*n+1)这些数划分D,并对D实现奇数幻方。
    见下图

    这里写图片描述

    第三步:从A表中的中心(即第n行的MagicSquare[n][n])开始,按照从左向右的方向,标出n个数,A表中的其他行则标出最左边的n格中的数(在图中用红色背景标出)。并且将这些标出的数和C表中的对应位置互换。见下图

    这里写图片描述

    第四步:在B表中的中心(如上解释)开始,自右向左,标出n-1列,将B中标出的数据与D表中对应位置的数据交换。但是6阶幻方中,n-1此时等于0,所以B与D不用做交换

    这里写图片描述

    展开全文
  • 该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #... printf("请输入幻方的阶数:"); scanf("%d",&n); if(n%2==0&&n>=4&&n(n-2)%4==0) oujie(n); else if(n%2==1&&n) jijie(n); else printf("错误的阶数!\n");

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

    #include

    #define N 100

    void oujie(int oushu)

    {

    int a[N][N]={0},i,j,k=1,n,m;

    n=oushu/2;

    m=(oushu-2)/4;

    for(i=1,j=3*n/2;k<=n*n;)

    {

    if(i<0)

    { i=i+3*n; continue; }

    if(j>=3*n)

    { j=j-3*n; continue; }

    if(j<0)

    { j=j+3*n; continue; }

    if(a[i][j]!=0)

    {

    i=i+2*3;

    j=j-1*3;

    if(i>3*n)

    { i=i-3*n; continue; }

    if(j<0)

    { j=j+3*n; continue; }

    }

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

    i=i-3;

    j=j+3;

    }

    for(i=1;i<3*n;i=i+3)

    for(j=1;j<3*n;j=j+3)

    {

    if(i

    a[i-1][j]=1;

    else if(i==(3*(m+1)+1)&&j!=(3*(m+1)-2)||i==(3*(m+1)-2)&&j==(3*(m+1)-2))

    a[i-1][j]=2;

    else a[i-1][j]=3;

    }

    for(i=1;i<3*n;i=i+3)

    for(j=1;j<3*n;j=j+3)

    {

    if(a[i-1][j]==1)

    {

    a[i-1][j-1]=4*a[i][j];

    a[i-1][j+1]=4*a[i][j]-3;

    a[i+1][j-1]=4*a[i][j]-2;

    a[i+1][j+1]=4*a[i][j]-1;

    }

    if(a[i-1][j]==2)

    {

    a[i-1][j-1]=4*a[i][j]-3;

    a[i-1][j+1]=4*a[i][j];

    a[i+1][j-1]=4*a[i][j]-2;

    a[i+1][j+1]=4*a[i][j]-1;

    }

    if(a[i-1][j]==3)

    {

    a[i-1][j-1]=4*a[i][j]-3;

    a[i-1][j+1]=4*a[i][j];

    a[i+1][j-1]=4*a[i][j]-1;

    a[i+1][j+1]=4*a[i][j]-2;

    }

    }

    for(i=0;i<3*n;i=i+1)

    {

    {

    for(j=0;j<3*n;j=j+1)

    {

    printf("%4d",a[i][j]);

    j=j+2;

    printf("%4d",a[i][j]);

    }

    printf("\n");

    }

    i=i+2;

    {

    for(j=0;j<3*n;j=j+1)

    {

    printf("%4d",a[i][j]);

    j=j+2;

    printf("%4d",a[i][j]);

    }

    printf("\n");

    }

    }

    }

    void jijie(int n)

    {

    int a[N][N]={0},i,j,k=1;

    for(i=0,j=n/2;k<=n*n;)

    {

    if(i<0)

    { i=i+n; continue; }

    if(j>=n)

    { j=j-n; continue; }

    if(j<0)

    { j=j+n; continue; }

    if(a[i][j]!=0)

    {

    i=i+2;

    j=j-1;

    if(i>n)

    { i=i-n; continue; }

    if(j<0)

    { j=j+n; continue; }

    }

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

    i--;

    j++;

    }

    for(i=0;i

    {

    for(j=0;j

    printf("%4d",a[i][j]);

    printf("\n");

    }

    }

    main()

    {

    int n;

    printf("偶数阶数为4n+2,且阶数为3到66之间\n");

    printf("请输入幻方的阶数:");

    scanf("%d",&n);

    if(n%2==0&&n>=4&&n<66&&(n-2)%4==0)

    oujie(n);

    else if(n%2==1&&n<66)

    jijie(n);

    else

    printf("错误的阶数!\n");

    展开全文
  • 该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #... printf("请输入幻方的阶数:"); scanf("%d",&n); if(n%2==0&&n>=4&&n(n-2)%4==0) oujie(n); else if(n%2==1&&n) jijie(n); else printf("错误的阶数!\n");

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

    #include

    #define N 100

    void oujie(int oushu)

    {

    int a[N][N]={0},i,j,k=1,n,m;

    n=oushu/2;

    m=(oushu-2)/4;

    for(i=1,j=3*n/2;k<=n*n;)

    {

    if(i<0)

    { i=i+3*n; continue; }

    if(j>=3*n)

    { j=j-3*n; continue; }

    if(j<0)

    { j=j+3*n; continue; }

    if(a[i][j]!=0)

    {

    i=i+2*3;

    j=j-1*3;

    if(i>3*n)

    { i=i-3*n; continue; }

    if(j<0)

    { j=j+3*n; continue; }

    }

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

    i=i-3;

    j=j+3;

    }

    for(i=1;i<3*n;i=i+3)

    for(j=1;j<3*n;j=j+3)

    {

    if(i

    a[i-1][j]=1;

    else if(i==(3*(m+1)+1)&&j!=(3*(m+1)-2)||i==(3*(m+1)-2)&&j==(3*(m+1)-2))

    a[i-1][j]=2;

    else a[i-1][j]=3;

    }

    for(i=1;i<3*n;i=i+3)

    for(j=1;j<3*n;j=j+3)

    {

    if(a[i-1][j]==1)

    {

    a[i-1][j-1]=4*a[i][j];

    a[i-1][j+1]=4*a[i][j]-3;

    a[i+1][j-1]=4*a[i][j]-2;

    a[i+1][j+1]=4*a[i][j]-1;

    }

    if(a[i-1][j]==2)

    {

    a[i-1][j-1]=4*a[i][j]-3;

    a[i-1][j+1]=4*a[i][j];

    a[i+1][j-1]=4*a[i][j]-2;

    a[i+1][j+1]=4*a[i][j]-1;

    }

    if(a[i-1][j]==3)

    {

    a[i-1][j-1]=4*a[i][j]-3;

    a[i-1][j+1]=4*a[i][j];

    a[i+1][j-1]=4*a[i][j]-1;

    a[i+1][j+1]=4*a[i][j]-2;

    }

    }

    for(i=0;i<3*n;i=i+1)

    {

    {

    for(j=0;j<3*n;j=j+1)

    {

    printf("%4d",a[i][j]);

    j=j+2;

    printf("%4d",a[i][j]);

    }

    printf("\n");

    }

    i=i+2;

    {

    for(j=0;j<3*n;j=j+1)

    {

    printf("%4d",a[i][j]);

    j=j+2;

    printf("%4d",a[i][j]);

    }

    printf("\n");

    }

    }

    }

    void jijie(int n)

    {

    int a[N][N]={0},i,j,k=1;

    for(i=0,j=n/2;k<=n*n;)

    {

    if(i<0)

    { i=i+n; continue; }

    if(j>=n)

    { j=j-n; continue; }

    if(j<0)

    { j=j+n; continue; }

    if(a[i][j]!=0)

    {

    i=i+2;

    j=j-1;

    if(i>n)

    { i=i-n; continue; }

    if(j<0)

    { j=j+n; continue; }

    }

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

    i--;

    j++;

    }

    for(i=0;i

    {

    for(j=0;j

    printf("%4d",a[i][j]);

    printf("\n");

    }

    }

    main()

    {

    int n;

    printf("偶数阶数为4n+2,且阶数为3到66之间\n");

    printf("请输入幻方的阶数:");

    scanf("%d",&n);

    if(n%2==0&&n>=4&&n<66&&(n-2)%4==0)

    oujie(n);

    else if(n%2==1&&n<66)

    jijie(n);

    else

    printf("错误的阶数!\n");

    展开全文
  • 将“对称交换,四角不变”构造任4k阶幻方的新方法,推广到任偶数,并给出具体算法。
  • 满意答案GorunNova2014.09.10采纳率:58%等级:10已帮助:617人看看这个吧,字数太多原因,不得不把程序打乱了 #include #define N 100 int main() { int h,i,j,k,l,n,t; int a[N][N]; while(1){ for(i=0;...

    满意答案

    02ae427d08e371d7e90d5b995e828d6d.png

    GorunNova

    2014.09.10

    02ae427d08e371d7e90d5b995e828d6d.png

    采纳率:58%    等级:10

    已帮助:617人

    看看这个吧,字数太多原因,不得不把程序打乱了 #include #define N 100 int main() { int h,i,j,k,l,n,t; int a[N][N]; while(1){ for(i=0;iN) { printf("The Number You Iput Is Invalid! Please Try Again!\n"); continue; } if(n%2==1) { for(i=0,j=n/2,k=1;k<=n*n;) { if(i<0) i=i+n; if(i>=n) i=i-n; if(j<0) j=j+n; if(j>=n)j=j-n; if(a[i][j]!=0) { i=i+2; j=j-1; continue;} a[i][j]=k++; i--; j++; } }//if 1 if(n%4==0) { for(i=0,k=1;i=3*n/4) for(j=0;j=n/4&&i<3*n/4) for(j=n-1;j>=0;j--) a[i][j]=k++; } for(j=n/4;j<3*n/4;j++) for(i=0;i4)break; if(t==1){h=0;l=0;} if(t==2){h=n/2;l=n/2;} if(t==3){h=0;l=n/2;} if(t==4){h=n/2;l=0;} for(i=h,j=l+n/4;k<=t*n*n/4;) { if(i=h+n/2)i=i-n/2; if(j=l+n/2)j=j-n/2; if(a[i][j]!=0){ i=i+2; j=j-1; continue;} a[i][j]=k++;i--;j++; } } for(j=0;j

    00分享举报

    展开全文
  • 第一步:任取一个2m+1 阶幻方,例如5阶幻方。如下。 1 23 16 4 21 15 14 7 18 11 24 17 13 9 2 20 8 19 12 6 5 3 10 22 25 第二步:在上面的m+1行 (此处为3行)的每个格子里填入一个字母L;接...
  • 构造偶数阶幻方的方法(n=4*m)

    千次阅读 2018-10-16 09:53:40
    对于n能被4整除的数,可以这样构造幻方: 1.依次从左到右,从第一行到第n行,按照顺序1,2,…,n^2填充这个矩阵。 2.把上面得到的矩阵分割成m^2个4X4的小矩阵。对于每个4X4小矩阵的两条对角线上的数a,用a的补,n的...
  • 奇数阶偶数阶幻方

    2020-03-09 11:13:44
    首先是奇数幻方,例如:构造一个五阶幻方 -先画一个5*5的表格。把“1”放在中间一列最上边的方格中,从它开始,按对角线方向(从左下往右上)顺次把由小到大的各数放入方格中。 -如果碰到顶,则折向底,如果到达右侧...
  • 对于由n阶幻方构造(n+2)阶幻方的镶边法,作者从奇数阶和偶数阶两种情况将其镶边过程作了改进,给出了一种构造奇数阶幻方的镶边模型及严格证明并给出由6阶幻方的镶边生成其他偶数阶幻方的镶边的一种迭代方法最后编程由3...
  • 该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #... printf("请输入幻方的阶数:"); scanf("%d",&n); if(n%2==0&&n>=4&&n(n-2)%4==0) oujie(n); else if(n%2==1&&n) jijie(n); else printf("错误的阶数!\n");
  • 该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #... printf("请输入幻方的阶数:"); scanf("%d",&n); if(n%2==0&&n>=4&&n(n-2)%4==0) oujie(n); else if(n%2==1&&n) jijie(n); else printf("错误的阶数!\n");
  • 该资源包含幻方的构造方法,奇数阶、偶数阶都实现了。是c代码,还归纳了代码的书写思路,非常的全面。看后肯定学的幻方的奥秘。
  • 对构造奇数阶幻方的菱形法进行了改进,并对改进方法进行证明。给出了一种构造偶数阶幻方的方法-比例放大法,在证明此方法的同时说明了其构造的幻方不唯一。
  • 一、关于单偶数阶幻方和双偶数阶幻方 (一)单偶数阶幻方(即当n=4k+2时) 任何4k+2 阶幻方都可由2k+1阶幻方与2×2方块复合而成,6是此类型的最小阶。  以6阶为例,可由3阶幻方与由0,1,2,3组成的2×2的小方块拼...
  • 阶幻方(奇数)、双偶幻方(能够被4整除,如8,12,16……)、单偶幻方(4m+2形式,如6,10……),构造算法各不相同。 下面的程序中,奇阶幻方的构造算法为Merzirac法。双偶幻方的构造算法为Spring法。单偶幻方的...
  • n阶幻方的C#实现

    2011-09-14 15:24:33
    n阶幻方的C#实现,分为奇数阶、单偶数阶,双偶数阶
  • 该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #... printf("请输入幻方的阶数:"); scanf("%d",&n); if(n%2==0&&n>=4&&n(n-2)%4==0) oujie(n); else if(n%2==1&&n) jijie(n); else printf("错误的阶数!\n");
  • 摘要:提出任意阶幻方的python语言的实现方法,分为奇数阶,偶数阶(n为整数,分为4n阶和4n+2阶幻方),速度还算可以,你可以体会以下。测试999阶幻方可以算出来; 1,什么是幻方 幻方(Magic Square)是一种将...
  • java实现第六届蓝桥杯四阶幻方

    万次阅读 多人点赞 2019-07-29 19:41:16
    阶幻方 把1~16的数字填入4x4的方格中,使得行、列以 及两个对角线的和都相等,满足这样的特征时称 为:四阶幻方。 四阶幻方可能有很多方案。如果固定左上角为1 ,请计算一共有多少种方案。 比如: 1 2 15 16 12 ...
  • 阶幻方

    2019-05-26 20:00:43
    百知教育——二维数组求高次幻方 ​ 最近刚刚接触java,本该老老实实的码代码,奈何笔者好胜心太重,总想凸显自己的“聪明才智”,在老师指导下,开始试着用java做出幻方。初次试水,还请各位大佬多多指教。 关于...
  • n 阶幻方问题

    千次阅读 2019-11-01 23:45:23
    前言 这是很久以前做的一个实验的内容,觉得特别有意思,所以...据了解,4阶幻方个数的基本型就有880个,通过旋转和反射总共可有7040个不同的形式的,5阶幻方基本型有275 305 224个,6阶幻方的个数非常之多,皮恩...
  • 任意阶幻方的解法及c++实现

    千次阅读 多人点赞 2017-06-27 19:38:10
    任意阶幻方的解法及c++实现
  • n阶幻方问题

    2016-08-26 13:01:00
    目录 第一节 n阶幻方问题 第二节 由n阶幻方引发的思考正文第一节 n阶幻方问题所谓n阶幻方问题,俗称“横竖斜相加和相等”(我们当时就是这么叫的)。用术语说就是:在一个N行N列的方格表中,有1,2,3......N*N-1,N...
  • n阶幻方 代码实现 及 详细文档 涵盖了全部整数(奇数,偶数)。
  • labview幻方程序代码

    2021-08-12 15:07:15
    用labview书写输出奇数阶与双偶数阶幻方的代码,17版本及以上均可打开
  • 阶幻方的构造算法

    2019-07-25 09:33:55
    阶幻方的构造算法 UP | HOME 各阶幻方的构造算法 奇数阶幻方 拉-卢贝尔算法 这个算法又称“阶梯法”。算法如下: 将1置于第一行中间。 将下一个数字置于当前数字的右上...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 518
精华内容 207
关键字:

偶数阶幻方