ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 奇数幻方程序实现

奇数幻方程序实现

原创 Linux操作系统 作者:wuft2003 时间:2009-07-05 12:38:47 0 删除 编辑

1.奇数幻方问题的解决方法:
  算法:
1)将1填入第一行中间;
2)将每个数填在前一个数的右上方。
3)若该位置超出最上行,则改填在最下行的对应位置;
4)若该位置超出最右列,则该填在最左列的对应行位置;
5)若某元素填在第一行最右列,下一个数填在该数同列的下一行;
6)若某数已填好,但其右上角已填了其他数据,则下一个数填在该数同列的下一行位置。


程序见test17.c:
#include
#define  N  5
void  main()
{  int  a[N][N]={0};
   int  k=1, m=0, n=N/2;
    a[m][n]=k;
   
   for(k=2; k<=N*N; k++)
   {
        m--,n++;
                   if (m==-1)
                   {
                     if (n==N)
                     {
                        m=1;
                n=N-1;
                      }
                     else
                        m=N-1;
         }
                   else
                   {
                     if (n==N)
                        n=0;
                     else
                        if (a[m][n])
                        {
                                  m+=2;
                    n--;
                }
              }
                             
       a[m][n]=k;
    }
         for (m=0; m         {   for (n=0; n              printf ("%4d", a[m][n]);
            putchar ('\n');
         }
}

 

2. 偶数幻方算法:

2.偶阶幻方,n=2*(2m+1)  
将幻方分成(2m+1)*(2m+1)的4个小幻方A、B、C、D,如图  
A   C  
D   B  
记u=2m+1,将要填的数分为1~u^2,u^2+1~2*u^2,2*u^2+1~3*u^2,3*u^2+1~4*u^2,将这些数分别按奇阶幻方的填法填进A、B、C、D,然后将A中最左列除列中间的那个元素以外的元素与D中对应位置的元素交换;再将A中左起第2列至左起(u+1)/2-1列的诸元素与D中对应位置的元素交换;再将A中(u+1)/2行,(u+1)/2列的这个元素与D中对应位置的元素交换;最后将C中右起第1列到第(u-1)/2-1列的元素与B中对应位置的元素交换。  
3.偶阶幻方,n=4*m  
将1~n*n从1行1列开始按先行后列的顺序填进幻方,将幻方分成m*m个4*4的小幻方,去掉小幻方对角线上的数,然后将去掉的数按从大到小的顺序从1行1列开始按先行后列的填写顺序填进幻方。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/21634752/viewspace-608347/,如需转载,请注明出处,否则将追究法律责任。

上一篇: 值得记住的一天
请登录后发表评论 登录
全部评论

注册时间:2009-05-12

  • 博文量
    295
  • 访问量
    322700