用java語言編寫程序計算九宮圖

前言

對於程序員來說,用程序解決數學問題是最有趣的事情之一。本人研究了一個能夠輕易計算九宮圖的算法,並且用java語言編寫程序得以實現。現將算法和代碼公佈,歡迎廣大程序愛好者前來閱讀、交流。

九宮圖簡介

九宮圖是我國古老的數學問題,也是一種數字藝術,就是把1~9九個數字填到3行3列九個方格中,使其每一橫、堅、斜行之和都等於15。如下圖就是九宮圖:

在這裏插入圖片描述

編程思想

要計算九宮圖,我首先想到的是找數字規律。對於九宮圖而言,以每個邊角數字(如4)爲首位,都能有3組不重複的數字組合的和爲15。例如上圖中以4爲開頭則有4、9、2,和4、3、8和 4、5、6三組數字之和爲15。如果僅要求第一個數字是4,後兩個數字可以顛倒位置,則這樣的數字組合有6種。同理以中央數字爲開頭,在後兩個數字可以顛倒位置的情況下,會有8個數字組合的和爲15。利用這一規律,我們可以輕易得到九宮圖中的4個拐角數字和1箇中央數字,其他數字就可輕易計算出。

算法

1、創建全局的一個數組和一個int型變量分部用來存儲4個邊角數字和1箇中央數字。設置標記數字d=0;
2、利用三層for循環將第一、第二、第三個數字均從1開始累加,到9爲止,中間嵌套if判斷語句保證三個數字不相等。
3、在for循環的最內層計算三個數字之和,如果等於15,則標記數字d自增1,表示已經找到一組和爲15的數字組合。
4、在循環的最外層,也就是第一個數字不變,後面兩個數字取任意不重複值取完之後,利用if語句進行判斷,如果d的值自增到了6,則說明找到了邊角數字,存入數組;如果d的值自增到了8,則說明得到了中央數字,需要賦值存儲。如果d的值自增到了4,說明此時是每一行中間的數字,但是這個數字我們不需要存儲。
5、每次d分別自增到4、6、8時,說明此時內部的兩層循環已經結束,第一個數字即將自增1再重新開始內部的兩層循環,此時需要將d的值重新歸0,以便計算不同的首位數字的到和爲15的數字組合個數。
6、當得到4個邊角數字和1箇中央數字之和,再計算每一行中間的數字就特別簡單了,只需要用15減去兩個就行。
7、所有數字就得到以後,就可以展示出來。

程序代碼

package InterestingProgram ;
public class JiuGongTu {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int d=0;
		int i=0;
		//創建int數組,用來存儲4個邊角數字
		int[] corner=new int[4];
		//center用來存儲中央的數字
		int center = 0;
		for(int a=1;a<10;a++){			
			for(int b=1;b<10;b++){				
				if(a!=b){
					for(int c=1;c<10;c++){						
						if(a!=c&&b!=c){
							int x=a+b+c;
							if(x==15){
								d++;
							}													
						}					
					}					
				}					
			}
			if(d==6){
				System.out.println("得到邊角數字是"+a);
				corner[i]=a;
				i++;
				d=0;				
			}
			
			if(d==4){
				d=0;
			}
			if(d==8){
				System.out.println("得到中央數字是"+a);
				center=a;
				d=0;			
			}
			
		}
		//第一行中間的數字爲
		int m1=15-corner[0]-corner[1];
		
		//最後一行中間的數字爲
		int m2=15-corner[2]-corner[3];
		
		//左邊列中間的數字爲
		int m3=15-corner[0]-corner[2];
		
		//左邊列中間的數字爲
		int m4=15-corner[1]-corner[3];
		System.out.println("九宮圖如下:");
		System.out.println(corner[0]+"  "+m1+"  "+corner[1]);
		System.out.println(m3+"  "+center+"  "+m4);
		System.out.println(corner[2]+"  "+m2+"  "+corner[3]);

	}

}

運行效果

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章