zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    元素居中浏览器的多种方法集锦
    javascript深入理解js闭包
    闭包
    碎片
    define
    define定义方法
    创建数据库sql语句
    java十进制转换成二进制数
    java解析JSON数据
    java实现最通俗易懂的01背包问题
  • 原文地址:https://www.cnblogs.com/shenxiaolin/p/5538364.html
Copyright © 2011-2022 走看看