鱼C论坛

 找回密码
 立即注册
查看: 2673|回复: 2

3*3格列与行和为15的问题,为什么第二个方法不能正常运行

[复制链接]
发表于 2016-9-6 19:20:06 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x

/**
* 和为15的棋盘游戏,要求从1到9的九个数不重复填入3*3棋盘的方格中。各行各列及对角线和为15,
* @author 刘焕濠
*
*/
public class GridGame {
       
        int[][] array;
        int count=1;
        public GridGame()
        {
                System.out.println("调用了构造函数");
                array=new int[3][3];
        }
        public void showGrid()
        {
                //System.out.println("调用了打印函数");
                int i,j;
                for(i=0;i<array.length;i++)
                {
                        for(j=0;j<array[i].length;j++)
                        {
                                System.out.print(array[i][j]+" ");
                        }
                        System.out.println();
                }
                System.out.println();
        }
        //***********************************************************
       
         /** quetion:同样的实现原理,为什么用了for循环就执行错误?
         *
         *
         * */
        private boolean datachecksumrow()
         {
         int i,j,k=0;
         for(i=0;i<array.length;i++)
         {
         for(j=0;j<array[i].length;j++)
         k=k+array[i][j];
         if(k!=15)
         return false;
         }
         return true;
         }
         private boolean datachecksumcolumn()
         {
         int i,j,k=0;
         for(i=0;i<array.length;i++)
         {
         for(j=0;j<array[i].length;j++)
         k+=array[j][i];
         if(k!=15)
         return false;
         }
         return true;
         }
         private boolean dataCheck()
         {
         if(!datachecksumrow())
         return false;
         if(!datachecksumcolumn())
         return false;
         if(array[0][0]+array[1][1]+array[2][2]!=15)
         return false;
         if(array[0][2]+array[1][1]+array[2][0]!=15)
         return false;
         return true;
         }
        //*********************************************************8
        /*private  boolean dataCheck()
        {
                //System.out.println("调用了检查函数");
                int i,j,k=0;
                for(i=0;i<array.length;i++)
                {
                       
                        for(j=0;j<array[i].length;j++)
                        k+=array[i][j];
                        //System.out.println("k="+k);
                        if(k!=15)
                                return(false);
                }
               
                for(k=0,i=0;i<3;i++)
                {
                        for(j=0;j<3;j++)
                        k+=array[j][i];
                        if(k!=15)
                        {
                                return(false);
                        }
                }
                     if(array[0][0]+array[0][1]+array[0][2]!=15)
                         return false;
                         if(array[1][0]+array[1][1]+array[1][2]!=15)
                         return false;
                         if(array[2][0]+array[2][1]+array[2][2]!=15)
                         return false;

                         if(array[0][0]+array[1][0]+array[2][0]!=15)
                         return false;
                         if(array[0][1]+array[1][1]+array[2][1]!=15)
                         return false;
                         if(array[0][2]+array[1][2]+array[2][2]!=15)
                         return false;
                if((array[0][0]+array[1][1]+array[2][2])!=15)
                        return(false);
                if((array[0][2]+array[1][1]+array[2][0])!=15)
                        return(false);
                return(true);
        }*/
        public void arrage()
        {
                System.out.println("调用了穷举函数");
                int sum=1;
                for(int i=1;i<=9;i++)
                {
                        for(int j=1;j<=9;j++)
                        {
                                if(i==j)
                                        continue;
                                for(int k=1;k<=9;k++)
                                {
//                                        System.out.println("函数到达k这里");
                                        if(k==j||k==i)
                                                continue;
                                        for(int l=1;l<=9;l++)
                                        {
                                                if(l==k||l==j||l==i)
                                                        continue;
                                                for(int m=1;m<=9;m++)
                                                {
                                                        //System.out.println("函数到达k这里");
                                                        if(m==k||m==j||m==l||m==i)
                                                                continue;
                                                        for(int n=1;n<=9;n++)
                                                        {
                                                                if(n==k||n==m||n==j||n==l||n==i)
                                                                        continue;
                                                                for(int o=1;o<=9;o++)
                                                                {
                                                                        //System.out.println("函数到达o这里");
                                                                        if(o==n||o==m||o==j||o==i||o==l||o==k)
                                                                                continue;
                                                                        for(int p=1;p<=9;p++)
                                                                        {       
                                                                                //System.out.println("函数到达p这里");
                                                                                if(p==n||p==m||p==j||p==i||p==l||p==k||p==o)
                                                                                        continue;
                                                                                for(int q=1;q<=9;q++)
                                                                                {
                                                                                        if(q==n||q==m||q==j||q==l||q==i||q==k||q==o||q==p)
                                                                                                continue;
                                                                                        array[0][0]=i;
                                                                                        array[0][1]=j;
                                                                                        array[0][2]=k;
                                                                                        array[1][0]=l;
                                                                                        array[1][1]=m;
                                                                                        array[1][2]=n;
                                                                                        array[2][0]=o;
                                                                                        array[2][1]=p;
                                                                                        array[2][2]=q;
                                                                                        //System.out.println("布局结束");
                                                                                        //showGrid();
                                                                                        if(dataCheck())
                                                                                        {
                                                                                                System.out.println("匹配成功");
                                                                                                System.out.println("=="+sum+"==");
                                                                                                sum++;
                                                                                                showGrid();
                                                                                        }
                                                                                }
                                                                        }
                                                                }
                                                        }
                                                }
                                        }
                                }
                        }
                }
        }
        public static void main(String[] args)
        {
                GridGame game=new GridGame();
                game.arrage();
                System.out.println("程序结束");
        }
}
















想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-9-7 09:49:16 | 显示全部楼层
看你写的那么多层循环我都怕了 O(n^8)的算法
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-9-13 13:03:52 | 显示全部楼层
y=lnX 发表于 2016-9-7 09:49
看你写的那么多层循环我都怕了 O(n^8)的算法

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-17 05:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表