1. 程式人生 > >奇數階幻方

奇數階幻方

程式碼:

import java.util.Scanner;
public class Test {

     public static void main(String[] args){
    	 
    	 
    	 Scanner sc = new Scanner(System.in);
    	 System.out.print("請輸入一個奇數:");
    	 int n = sc.nextInt();//有鍵盤輸入一個奇數
    	 if(  n%2 == 0 ){
    		 System.out.println("請輸入一個奇數");
    		 return;
    	 }
         int i,j;
    	 
    	 
    	 int array[][] = new int[n][n];//建立一個n行n列數列
    	 int a = n-1;//獲取最後一行的行下標
    	 int b = n/2;//獲取中間列的列下標
    	 
    	 
    	 
    	 //判斷一個字串還不是迴文字串
    	 for ( i = 1 ; i <= n*n ; i++ ){
    		 array[a++][b++] = i;//給最後一行的中間元素賦值為1
    		 if( i%n == 0 ){     //判斷當前i值是否為n的倍數
    			 a = a-2;        //如果是則放在上行同列位置上
    		     b = b-1;
    		 }else{              //否則放在下行的下一列
    			 a = a%n;
    			 b = b%n;
    		 }
    	 }
    	   	
    	 
    	 
    	 System.out.println(n+"階幻方如下:");
    	 for ( i = 0 ; i < n ; i++){//將幻方輸出
    		 for ( j = 0 ; j < n ; j++){
    			 System.out.print(" "+array[i][j]);
    		 }
    		 System.out.println();
    	 }
    	 
    	 
     
     }
   
}

執行結果:

例項結果1:
請輸入一個奇數:5
5階幻方如下:
 11 18 25 2 9
 10 12 19 21 3
 4 6 13 20 22
 23 5 7 14 16
 17 24 1 8 15



例項結果2:
請輸入一個奇數:7
7階幻方如下:
 22 31 40 49 2 11 20
 21 23 32 41 43 3 12
 13 15 24 33 42 44 4
 5 14 16 25 34 36 45
 46 6 8 17 26 35 37
 38 47 7 9 18 27 29
 30 39 48 1 10 19 28