zoukankan      html  css  js  c++  java
  • java计算奇数阶魔方阵

    一、提出问题

    所谓“奇数阶魔方阵”是指n为不小于3的奇数的魔方阵。这类魔方阵的形式多样,这里我们仅讨论其中的一种形式的正规魔方阵。例如:3阶、5阶和7阶的魔方阵如图3 – 4 所示。

    clip_image002clip_image004clip_image006

    图3 – 4 3阶5阶和7阶魔方阵

    容易知道,这三个魔方阵的魔方常数分别是15、65和175。

    现在要求给出:能让计算机自动输出类似图3 – 4 所示的n阶奇数魔方阵的算法,其中n为任意给定的一个不小于3的奇数。

    二、简单分析

    决定“奇数阶魔方阵”的关键是要按要求决定其方阵中的各个数字。观察图3 – 4中的三个奇数阶魔方阵,不难发现:

    1.由于是正规魔方,故所填入的n 2个不同整数依次为1、2、3、…、n 2

    2.各行、列和对角线上的数字虽各不相同,但其和却是相同的。这表明,其魔方常数可由公式n ( n 2 + 1 ) / 2得到。

    3.数字在阵列中的次序,并没有遵从阵列单元的行、列下标的顺序,但数字“1”却始终出现在阵列第一行的正中间位置,而数字“n 2”也始终出现在阵列第n行的正中间位置,这说明阵列中的数字排列应该是有一定规律的。

    import java.util.Scanner;
    /**
     * 
     * @author 冷血
     *
     */
    public class Java_4 {
        private int[][] a;
        private int j ,i ,sum = 1;
        private int N,n;
        public Java_4(int n){
            N = n;
            this.n = n;
                N=N-1;
             a = new int[n][n];
        }
        public void jiSuan(){
            i = 0; j=n/2;
            a[i][j] =sum ;
            while(sum<=n*n){
                if(i==0&&j!=N){
                    i = N;
                    j++;
                    sum++;
                    a[i][j]=sum;
                    }
                if(sum==n*n)
                    break;
                if(j==N&&i!=0){
                    j=0;
                    i--;
                    sum++;
                    a[i][j]=sum;        
                }
                if(j==N&&i==0){
                    
                    i++;
                    
                    sum++;
                    a[i][j]=sum;
                    
                }
                if(sum==n*n)
                    break;
                if(i!=0&&j!=N&&a[i-1][j+1]==0){
                    i--;j++;sum++;
                    a[i][j] = sum;
                }
                if(sum==n*n)
                    break;
                if(i!=0&&j<N&&a[i-1][j+1]!=0){
                    i++;sum++;
                    a[i][j] = sum;
                
                }
                if(sum==n*n)
                    break;
            }
            if(i==0&&j==0){
                i=N;sum++;j++;
                a[i][j] = sum;
            }
        }
        public void paint(){
            for(int k = 0;k<a.length;k++){
                for(int l = 0;l<a.length;l++){
                    System.out.printf("%-5d",a[k][l]);
                }
                System.out.println();
                System.out.println();
            }
        }
        public static void main(String[] args) {
            int m=0;
            @SuppressWarnings("resource")
            Scanner nuber = new Scanner(System.in);
            m = nuber.nextInt();
            Java_4 java = new Java_4(m);
            java.jiSuan();
            java.paint();
        }
    }
    欢迎关注我QQ:1402876003,加入我的IT菜鸟交流群;460062607
  • 相关阅读:
    什么是软件架构?
    子系统、框架与架构
    今天开始锻炼身体
    程序语言中基本数值类型的分类
    软件架构的作用
    软件架构要设计到什么程度
    软件架构视图
    更多资料
    How to:如何在调用外部文件时调试文件路径(常见于使用LaunchAppAndWait和LaunchApp函数)
    installshield卸载时提示重启动的原因以及解决办法
  • 原文地址:https://www.cnblogs.com/qq1402876003/p/4998346.html
Copyright © 2011-2022 走看看