给定一个奇数n,比如n=3,生成1到n平方的数,如1到9,填入九宫格,使得横竖斜的和都相等。
奇数幻方口诀:
- 把放置在第一行的中间。
- 顺序将等数放在右上方格中。
- 当右上方格出界的时候,则由另一边进入。(把第最后一行当作第一行的上方,把最左边的一列当作最右边的右边)
- 当右上方格中已经填有数,则把数填入正下方的方格中。
- 按照以上步骤直到填写完所有个方格。
如输入3得到结果
8 1 6 3 5 7 4 9 2
代码为:
package huanHuang; public class HF { public static int[][] square(int n){ int[][] martix=new int[n][n]; for(int i=0;i<n;i++) for(int j=0;j<n;j++) martix[i][j]=0; int i=0; int j=n/2; martix[i][j]=1; for(int k=2;k<=n*n;k++){ if(i>=1 && j<n-1){//非第一行且右边不越界 if(martix[i-1][j+1]==0){//若数字的右上方未填充数字,这把右上方写入K; i--; j++; } else{//否则在数子的下方写入K; i++; } } else if(i==0 && j<n-1){//第一行右边不越界 if(martix[n-1][j+1]==0){ i=n-1; j++; } else{ i++; } } else if(i>=1 && j==n-1){//非第一行右边越界 if(martix[i-1][0]==0){ i--; j=0; } else{ i++; } } else{//第一行且右边越界 if(martix[0][n-1]==0) { i=0; j=n-1; } else{ i++; } } martix[i][j]=k; } return martix; } public static void main(String[] args) { int n=3; int[][] m=HF.square(n); for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ System.out.print(m[i][j]+" "); } System.out.println(); } } }