java計算奇數階魔方陣

一、提出問題

所謂“奇數階魔方陣”是指n爲不小於3的奇數的魔方陣。這類魔方陣的形式多樣,這裏我們僅討論其中的一種形式的正規魔方陣。例如:3階、5階和7階的魔方陣如圖3 – 4 所示。

圖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 ( n2 + 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();
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章