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阶幻方一共有n*n个数字(从1~n*n)
        //奇数阶幻方的实现算法
        for (int key = 1; key <= n * n; key++) {
            if ((key % n) == 1)
                i++;
            else {  //填充当前数的右上角那个数
                i--;
                j++;
            } 

            if (i == 0) {//判断条件:若是在(n+2)*(n+2)阶方阵的第一行
                if(j==n+1){
                    i=2;
                    j=n;
                }else{
                    i=n;
                }
            }
            else{
                if(j==n+1){
                    j=1;
                }
            }
            square[i][j] = key;

        }

        //对(n+2)*(n+2)阶的方阵进行筛选出中间的n*n阶幻方
        int[][] matrix = new int[n][n];
        for (int k = 0; k < matrix.length; k++) {
            for (int l = 0; l < matrix[0].length; l++) {
                matrix[k][l] = square[k + 1][l + 1];
            }
        }
        return matrix;

    }

    //测试函数
    public static void main(String[] args) {
        int[][] magic = Magic_Odd.magicOdd(11); //测试11阶幻方
        for (int k = 0; k < magic.length; k++) {
            for (int l = 0; l < magic[0].length; l++) {
                System.out.print(magic[k][l] + " ");
            }
            System.out.println();
        }
    }
}

三、测试结果:

(相关源码资源详见:https://github.com/shenxiaolinZERO/Resources/tree/master/Resources/Magic_Test

时间: 2024-12-11 09:56:51

Java 实现奇数阶幻方的构造的相关文章

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

求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为不小于3的奇数的魔方阵.这类魔方阵的形式多样,这里我们仅讨论其中的一种形式的正规魔方阵.例如:3阶.5阶和7阶的魔方阵如图3 – 4 所示. , , 图3 – 4 3阶5阶和7阶魔方阵 容易知道,这三个魔方阵的魔方常数分别是15.65和175. 现在要求给出:能让计算机自动输出类似图3 – 4 所示的n阶奇数魔方阵的算法,其中n为任意给定的一个不小于3的奇数. 二.简单分析 决定"奇数阶魔方阵"的关键是要按要求决定其方阵中的

任意阶幻方(魔方矩阵)C语言实现

魔方又称幻方.纵横图.九宫图,最早记录于我国古代的洛书.据说夏禹治水时,河南洛阳附近的大河里浮出了一只乌龟,背上有一个很奇怪的图形,古人认为是一种祥瑞,预示着洪水将被夏禹王彻底制服.后人称之为"洛书"或"河图",又叫河洛图. 南宋数学家杨辉,在他著的<续古摘奇算法>里介绍了这种方法:只要将九个自然数按照从小到大的递增次序斜排,然后把上.下两数对调,左.右两数也对调:最后再把中部四数各向外面挺出,幻方就出现了. (摘自<趣味数学辞典>) 在西方

任意阶幻方的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

算法:九宫格问题--奇数阶魔方(Magic-Square)

一.魔方介绍 魔方(这里是简称,也可以叫幻方.魔术矩阵,Magic Square)是 n×n 正方形网格(n 为每侧的单元数),里面每个单元格填充了不同的正整数 1, 2, 3, ... , n2,并且每一行.每一列和对角线中的正整数之和相等.每行.每列以及对角线上的单元格里的正整数之和又叫做魔术常数或魔方的魔术和. 幻方历史: <系辞>云:“河出图,洛出书,圣人则之.”在宋朝之前,洛书的记述只有文字. 九宫图实物最早发现于西汉,1977年中国考古学家在安徽阜阳县双古堆西汉古墓中发现汉文帝七年

幻方的构造模板

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

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个整数,且其对角线.横行.纵行的数字和都相等.       好了,在具体详解该问题之前,我们先看个例子,熟

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 <