如何求解偶数阶魔方阵 用C语言 编写的代码

如何求解偶数阶魔方阵 用C语言 编写的代码,第1张

本人亲自写的程序,望采纳,如下:

#include<stdio.h>

int a[200][200]={0}           /*200为我自己定义的,可根据需要修改*/

void JSZ(int n)                                /*奇数魔方算法*/

{int p,k,i,j

 p=0k=n/2

 a[p][k]=1

 for(i=2i<=n*ni++)

  {if((i-1)%n==0)

    {if(p==n-1)p=0

     else p++

    }

   else

    {if(p==0)p=n-1

     else p--

     if(k==n-1)k=0

     else k++

 亩型   }

   a[p][k]=i

  }

}

void Ou4bZ(int n)                  /*偶数4的倍数魔方阵算法*/

{int a1[200][200],a2[200][200],i,j

 for(i=0i<ni++)

  for(j=0j<nj++)

   {if(i%4==0||(i+1)%4==0)a1[i][j]=j+1

    else a1[i][j]=n-j

   }

 for(j=0j<nj++)

  for(i=0i<ni++)

   {if(j%4==0||(j+1)%4==0)a2[i][j]=n*i

    else a2[i][j]=(n-1-i)*n

   }

 for(i=0i<ni++)

  for(j=0j<nj++)

   a[i][j]=a1[i][j]+a2[i][j]

}

void N_4OuZ(int n)                   /*偶数培旦非4的倍数魔方阵算法*/

{int s[200],x[200],z[200],y[200],i,p,k,b[200][200]={0}

 z[0]=4z[1]=10s[0]=2s[1]=9

 for(i=2i<n/2-1i++)

  {if(i%2==0)

    {z[i]=z[i-1]+1

     s[i]=s[i-1]+3

    }

   else

    {z[i]=z[i-1]+7

     s[i]=s[i-1]+5

    }

  }

 y[0]=3y[1]=5x[0]=1x[1]=6

 for(i=2i<n/2i++)

  {if(i%2==0)

    {y[i]=y[i-1]+3

     x[i]=x[i-1]+1

    }

   else

    {y[i]=y[i-1]+5

     x[i]=x[i-1]+7

    }

  }

 Ou4bZ(n-2)

 for(p=1p<n-1p++)

  for(k=1k<n-1k++)

   b[p][k]=a[p-1][k-1]+(n*n-(n-2)*(n-2))/2

 for(p=1p<n-1p++)

  for(k=1k<n-1k++)

   a[p][k]=b[p][k]

 for(i=0i<n/2-1i++)

  {a[0][i]=s[i]

   a[n-2-i][0]=z[i]

  }

 for(i=0i<n/2i++)

  {a[n-1][n-2-i]=x[i]

   a[i][n-1]=y[i]

  }

 for(i=0i<ni++)

  {if(i==0)a[n-1][0]=n*n+1-a[0][n-1]

   else if(i<n/2-1)a[n-1][i]=n*n+1-a[0][i]

   else if(i==n-1)a[n-1][n-1]=n*n+1-a[0][0]

   else a[0][i]=n*n+1-a[n-1][i]

   if(i>0&&i<n/2)a[i][0]=n*n+1-a[i][n-1]

   if(i>=n/2&&i<n-1)a[i][n-1]=n*n+1-a[i][0]

  }

}

void main()/*主函数*/

{int i,j,n

 lp:printf("JieShu(1~200): ")

 scanf("%d",&n)

 if(n<1||n==2||n>200)                /*由于没有二阶魔方阵,"n>200"为超出定义范围*/

  {printf("SCANF ERROR!\n")

   goto lp

  }

 if(n%2==0)

  {if(n%4==0)Ou4bZ(n)

   else N_4OuZ(n)

  }

 else JSZ(n)

 for(i=0i<迅中猜ni++)

  {for(j=0j<nj++)

    printf("%5d",a[i][j])

   printf("\n")

  }

 goto lp

}

#include<stdio.h>

void main(){

int i,j,n,row,col,a[11][11]

printf("please input n:")

scanf("%d",&n)

col=n/2//

row=0//

for(i=1i<=n*ni++){ //答局i<=n*n,楼主写错了,如果想保持为<可做相应修改

if(row==-1) // 不明白再联系吧

row=n-1

if(col==n)

col=0 //禅帆

a[row][col]=i//

if(i%n==0)

row++

else{

row--

col++

}

}

for(i=0i<ni++){

for(j=0j<nj++)

printf("贺举雹%10d",a[i][j])

printf("\n")

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12551181.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存