黑马程序员技术交流社区

标题: 一个小学应用题 [打印本页]

作者: 明锦添    时间: 2013-3-19 21:54
标题: 一个小学应用题
想起来一个小学的应用题,用1~9九个数字填充九宫格(3行三列),使得其横竖斜的和都为15,计算出来有八个结果来。用java怎么实现呢{:3_62:}。
作者: 田磊阳    时间: 2013-3-19 22:27
本帖最后由 田磊阳 于 2013-3-19 22:43 编辑

import java.util.Scanner;
class Demo{
    public static void main(String[] args){
      
        System.out.println("请输入九宫格的行列规模(只能是奇数的)");
        Scanner n = new Scanner(System.in);
        int N;
      
        double d;
        while (true){
            d = n.nextDouble();
            N = (int)d;
            if ((d-N)>1.0E-4||N%2==0||N<0)
                {System.out.println("输入出错,格局只能是正奇数。请重新输入");}
            else break;
        }
      
        int[][] result = new int[N][N];   
        int row = 0;
        int col = N/2;
        for (int i=1;  i<=N*N; i++){
            result [row][col] = i;
            row--;
            col++;
            if (row<0&&col>=N){col--;row+=2;}
            else if (row<0){ row = N-1;}  
            else if (col>=N){col = 0;}  
            else if (result[row][col] != 0){col--;row+=2;}  
        }
      
        for (int i=0;  i<N;  i++){
            for(int j=0;  j<N; j++){System.out.print(result[j]+"\t");}
            System.out.println();
        }
      
        int[][] result2 = new int[N][N];
        result2[N/2][N/2] = (N*N+1)/2;  
        row = 0;   
        col = N/2;
        for (int i=1; i<=N*N/2; i++){
            result2[row][col] = i;
            
            result2[N-row-1][N-col-1] = N*N+1-i;
            row--;
            col++;
            if (row<0){ row = N-1;}   
            else if (col>=N){col = 0;}  
            else if (result2[row][col] != 0){col--;row+=2;}  
            
        }
        System.out.println();
        
        for (int i=0;  i<N;  i++){
            for(int j=0;  j<N; j++){System.out.print(result2[j]+"\t");}
            System.out.println();
        }
    }
}



作者: 张文星    时间: 2013-3-19 22:43
用穷举法来实现,就是一个一个的试,这种方法思路最简单,但耗时最多,到四阶幻方、五阶幻方的时候就开始有点慢了。
作者: Gaara    时间: 2013-3-19 22:44
张文星 发表于 2013-3-19 22:43
用穷举法来实现,就是一个一个的试,这种方法思路最简单,但耗时最多,到四阶幻方、五阶幻方的时候就开始有 ...

兄弟咱俩名字好像啊  
作者: 张文星    时间: 2013-3-20 09:19
张文彬 发表于 2013-3-19 22:44
兄弟咱俩名字好像啊

哈哈,是啊,不过我的是家里按排行起的
作者: 王浩威    时间: 2013-3-20 17:49
异性兄弟




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2