A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 明锦添 中级黑马   /  2013-3-19 21:54  /  1616 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

想起来一个小学的应用题,用1~9九个数字填充九宫格(3行三列),使得其横竖斜的和都为15,计算出来有八个结果来。用java怎么实现呢{:3_62:}。

评分

参与人数 1技术分 +1 收起 理由
猫腻 + 1

查看全部评分

5 个回复

倒序浏览
本帖最后由 田磊阳 于 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();
        }
    }
}


评分

参与人数 2技术分 +2 收起 理由
黄玉昆 + 1
猫腻 + 1

查看全部评分

回复 使用道具 举报
用穷举法来实现,就是一个一个的试,这种方法思路最简单,但耗时最多,到四阶幻方、五阶幻方的时候就开始有点慢了。

评分

参与人数 1技术分 +1 收起 理由
猫腻 + 1

查看全部评分

回复 使用道具 举报
张文星 发表于 2013-3-19 22:43
用穷举法来实现,就是一个一个的试,这种方法思路最简单,但耗时最多,到四阶幻方、五阶幻方的时候就开始有 ...

兄弟咱俩名字好像啊  
回复 使用道具 举报
张文彬 发表于 2013-3-19 22:44
兄弟咱俩名字好像啊

哈哈,是啊,不过我的是家里按排行起的
回复 使用道具 举报
王浩威 来自手机 中级黑马 2013-3-20 17:49:57
地板
异性兄弟
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马