魔方阵n阶超简单算法

作者在 2014-09-04 14:49:40 发布以下内容


#include<stdio.h>
#define M 507
main()
{
 unsigned int a[M][M]={0},H[M]={0},V[M]={0};
 unsigned int i,j,k,n;
 unsigned int q=0,p=0;
 i=0;j=M/2;a[i][j]=1;//第一行中间列为1
 for(k=2;k<=M*M;k++)
  {
     i=(i+(M-1))%M;j=(j+1)%M;//从2开始后一个数在前一个数右上方,超过则回绕
     if(a[i][j]==0)//初始状态(0状态)
     a[i][j]=k;
 else//非0状态,填到该数字正下方
     {
        i=(i+1)%M+1;
        j=(j+(M-1))%M;
        a[i][j]=k;

     }
 }
 printf("%d阶魔方阵为:\n",M);
 for(i=0;i<M;i++)
  for(j=0;j<M;j++)
  {
   printf("%5d",a[i][j]);
   if((j+1)%M==0) printf("\n\n");
  }
  printf("\n");
 ///////////////////////////////////验证
 printf("%d阶魔方验证:\n",M);
 for(n=0;n<M;n++)
   for(j=0;j<M;j++)
   {
       V[n]=V[n]+a[n][j];//每行之和
       H[n]=H[n]+a[j][n];//每列只和
    }
   for(i=0;i<M;i++)
   {   p=p+a[i][i];//对角线只和
        q=q+a[M-1-i][i];
    printf("V[%d]=%d,H[%d]=%d\n",i,V[i],i,H[i]);
   }
    printf("p=%d\t,q=%d",p,q);
    printf("\n");

}

默认分类 | 阅读 2155 次
文章评论,共0条
游客请输入验证码
文章分类
文章归档
最新评论