用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]); } }