首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

3阶魔方阵的全部解法解决方案

2012-02-13 
3阶魔方阵的全部解法#includestdio.h main(){inta[3][3]{0}intb[9]{0}intm,ninti,jintCount0int

3阶魔方阵的全部解法
#include   "stdio.h "
main()
{
int   a[3][3]   =   {0};
int   b[9]   =   {0};
int   m,n;
int   i,j;
int   Count   =   0;
int   k;
a[1][1]   =   5;

for(b[0]   =   1;   b[0] <=   9;   b[0]++)
{
            if(b[0]   ==   5)   b[0]++;
  for(b[1]   =   1;   b[1]   <=   9;   b[1]++)
  {
              if(b[1]   ==   5)   b[1]++;
    for(b[2]   =   1;   b[2]   <=   9;   b[2]++)
    {
                if(b[2]   ==   5)   b[2]++;
      for(b[3]   =   1;   b[3]   <=   9;   b[3]++)
      {
                  if(b[3]   ==   5)   b[3]++;
        for(b[4]   =   1;   b[4]   <=   9;   b[4]++)
        {
                    if(b[4]   ==   5)   b[4]++;
          for(b[5]   =   1;   b[5]   <=   9;   b[5]++)
          {
                      if(b[5]   ==   5)   b[5]++;
            for(b[6]   =   1;   b[6]   <=   9;   b[6]++)
            {
                        if(b[6]   ==   5)   b[6]++;
              for(b[7]   =   1;   b[7]   <=   9;   b[7]++)
              {
                          if(b[7]   ==   5)   b[7]++;
                              Count   =   0;
                              k   =   0;
                          for(m   =   0;m   <   9;m++)
                            for(n   =   m   +   1;n   <   9;n++)
                            {
                                      if(b[m]   !=   b[n])
                                      Count++;
                            }

                          if(Count   ==   36)
                          {

                                    for(i   =   0;i   <   3;i++)


                                      for(j   =   0;j   <   3;j++)
                                      {
                                                if(i   ==   1   &&   j   ==   1)j++;
                                                a[i][j]   =   b[k++];
                                      }


                                    if(a[0][0]   +   a[0][1]   +   a[0][2]   ==   15)
                                    if(a[2][0]   +   a[2][1]   +   a[2][2]   ==   15)
                                    if(a[0][0]   +   a[1][0]   +   a[2][0]   ==   15)
                                    if(a[0][2]   +   a[1][2]   +   a[2][2]   ==   15)
                                    if(a[1][0]   +   a[1][2]   ==   10)
                                    if(a[0][0]   +   a[2][2]   ==   10)
                                    if(a[0][1]   +   a[2][1]   ==   10)
                                    if(a[2][0]   +   a[0][2]   ==   10)
                                    {
                                              for(i   =   0;i   <   3;i++)
                                              {
                                                for(j   =   0;j   <   3;j++)
                                                {
                                                          printf( "%2d   ",a[i][j]);


                                                }
                                                printf( "\n ");
                                              }
                                              printf( "\n ");
                                    }
                          }
              }
            }
          }
        }
      }
    }
  }
}
getch();

}
请问一下要如何把代码优化呢,循环多了处理起来好慢,要能够求出全部的解,

[解决办法]
3阶的话求出一组解,然后第一排和三排交换,
第一列和第三列交换.这样就有4组 解了.

热点排行