奇数幻方

给定一个奇数n,比如n=3,生成1到n平方的数,如1到9,填入九宫格,使得横竖斜的和都相等。

奇数幻方口诀:

  • 放置在第一行的中间。
  • 顺序将等数放在右上方格中。
  • 当右上方格出界的时候,则由另一边进入。(把第最后一行当作第一行的上方,把最左边的一列当作最右边的右边)
  • 当右上方格中已经填有数,则把数填入正下方的方格中。
  • 按照以上步骤直到填写完所有个方格。

如输入3得到结果

8    1    6
3    5    7
4    9    2    

代码为:

package huanHuang;

public class HF {
    public static int[][] square(int n){
        int[][] martix=new int[n][n];
        for(int i=0;i<n;i++)
            for(int j=0;j<n;j++)
                martix[i][j]=0;
        int i=0;
        int j=n/2;
        martix[i][j]=1;
        for(int k=2;k<=n*n;k++){
            if(i>=1 && j<n-1){//非第一行且右边不越界
                if(martix[i-1][j+1]==0){//若数字的右上方未填充数字,这把右上方写入K;
                    i--;
                    j++;
                }
                else{//否则在数子的下方写入K;
                    i++;
                }
            }
            else if(i==0 && j<n-1){//第一行右边不越界
                if(martix[n-1][j+1]==0){
                    i=n-1;
                    j++;
                }
                else{
                    i++;
                }
            }
            else if(i>=1 && j==n-1){//非第一行右边越界
                if(martix[i-1][0]==0){
                    i--;
                    j=0;
                }
                else{
                    i++;
                }
            }
            else{//第一行且右边越界
                if(martix[0][n-1]==0)
                {
                    i=0;
                    j=n-1;
                }
                else{
                    i++;
                }

            }
            martix[i][j]=k;

        }
        return martix;
    }
    public static void main(String[] args) {
        int n=3;
        int[][] m=HF.square(n);
        for(int i=0;i<n;i++){
            for(int j=0;j<n;j++){
                System.out.print(m[i][j]+"\t");
            }
            System.out.println();
        }

    }

}

  

时间: 2024-09-28 21:30:12

奇数幻方的相关文章

Java 实现奇数阶幻方的构造

一.设计的流程图如下所示 二.Java 语言的代码实现 package MagicSquare; //奇数幻方的实现 public class Magic_Odd { //n 为幻方的阶数 public static int[][] magicOdd(int n) { //构造一个(n+2)*(n+2)阶的方阵 int[][] square = new int[n + 1][n + 1]; int i = 0; int j = (n + 1) / 2; //从第一行的中间那个数字(是1)开始填幻

求N奇数阶幻方

1. 如果矩阵满足条件,那么对任意,也满足条件.证明显然. 设为奇数,我们现在构造一个n阶幻方包含0到所有数这里x,y满足同余式待确定. 由于该方程组的系数矩阵的行列式为1,所以对任意i,j有唯一解.我们接下来确定a,b: 首先验证每行每列的和均相等,即 由于对任意i,,当x取遍模n的剩余类时,也会取遍所有的剩余类 故每行的和为:同理验证每列. 对于对角线:令b = n - 1, a = (n-1)/2,可以验证y = (n - 1)/2, x = i所以其和为:n*(0 + ... n - 1

Java 实现任意N阶幻方的构造

一.关于单偶数阶幻方和双偶数阶幻方 (一)单偶数阶幻方(即当n=4k+2时) 任何4k+2 阶幻方都可由2k+1阶幻方与2×2方块复合而成,6是此类型的最小阶. 以6阶为例,可由3阶幻方与由0,1,2,3组成的2×2的小方块拼成一个6×6的大方块复合而成. 其中,3阶幻方(洛书)如下图1所示, (图1) 800x600 Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE MicrosoftInternetExplorer4 /* Sty

幻方的构造模板

/* 幻方的计算: 计算任意阶数幻方的各行.各列.各条对角线上所有数的和的公式为:sum=n*(n^2+1)/2 n为阶数 幻方分为奇阶幻方和偶阶幻方 一.当n为奇数时称为奇阶幻方 1.Merzirac法生成奇阶幻方 在第一行居中的方格内放1,依次向右上方填入2.3.4…,如果右上方已有数字,则向下移一格继续填写. 2.loubere法生成奇阶幻方 在居中的方格向上一格内放1,依次向右上方填入2.3.4…,如果右上方已有数字,则向上移两格继续填写 3.horse法生成奇阶幻方 (1)对于所有的奇

任意阶幻方的c++实现----奇阶幻方、双偶幻方、单偶幻方。

幻方分为3类.奇阶幻方(奇数).双偶幻方(能够被4整除,如8,12,16--).单偶幻方(4m+2形式,如6,10--),构造算法各不相同. 下面的程序中,奇阶幻方的构造算法为Merzirac法.双偶幻方的构造算法为Spring法.单偶幻方的构造算法为Strachey法. 单偶幻方: 在第一行居中的方格内放1,依次向右上方填入2.3.4-,如果右上方已有数字,则向下移一格继续填写. 参考:http://blog.csdn.net/zheng0518/article/details/9006281

n阶幻方问题

转载自:http://blog.csdn.net/fengchaokobe/article/details/7437767 目录        第一节 n阶幻方问题       第二节 由n阶幻方引发的思考 正文 第一节 n阶幻方问题 所谓n阶幻方问题,俗称“横竖斜相加和相等”(我们当时就是这么叫的).用术语说就是:在一个N行N列的方格表中,有1,2,3......N*N-1,N*N这N*N个整数,且其对角线.横行.纵行的数字和都相等.       好了,在具体详解该问题之前,我们先看个例子,熟

Python 趣味百题

趣味整数 1 不重复的3位数 -易 2 水仙花数 -易 3 完全数 -中 4 相亲数 -中 5 黑洞数 -中 6 勾股数 -易 7 自守数 -易 8 3位反序数 -中 趣味素数 1 素数 -中 2 孪生素数 -中 3 金蝉素数 -中 4 可逆素数 -中 5 回文素数 -中 6 平方回文素数 -中 7 梅森尼数 -中 8 哥德巴赫猜想 -中 9 等差素数数列 -中 趣味图形 1 回型矩阵 -中 2 九九乘法表 -易 3 杨辉三角 -易 数学问题 1 天平秤物 -难 2 黑色星期五 -易 3 存钱问

神奇的幻方【够造奇数阶的魔方阵】

http://noi.openjudge.cn/ch0108/22/ 总时间限制:  1000ms 内存限制:  65535kB 描述 幻方是一个很神奇的N*N矩阵,它的每行.每列与对角线,加起来的数字和都是相同的.我们可以通过以下方法构建一个幻方.(阶数为奇数)1.第一个数字写在第一行的中间2.下一个数字,都写在上一个数字的右上方:    a.如果该数字在第一行,则下一个数字写在最后一行,列数为该数字的右一列    b.如果该数字在最后一列,则下一个数字写在第一列,行数为该数字的上一行    

N(奇数)阶幻方-java实现代码

看完最强大脑,有一期是说N阶幻立方的,作为一个程序员,我的第一反应时我可以用程序实现,在此公布N(奇数)阶幻方的java实现代码: package com.lzugis.test; public class Practice { public static int[][] magicOdd(int n) { int[][] square = new int[n + 1][n + 1]; int i = 0; int j = (n + 1) / 2; for (int key = 1; key <