求n阶幻方的一种算法实现C/C++

来源:互联网 发布:linux查看二进制文件 编辑:程序博客网 时间:2024/04/19 05:37

求n阶幻方方的一种实现。这里的n只能是一个奇数。它是la Loubere 在17世界发现的构造方法。

#include<stdio.h>int a[10][10]; void magic_circle(int n){          int k =2;     int i=0,j=n/2;     a[i][j]=1;     printf("%d\n",n);     for(int t =0;t<n*n;t++){                    if(i==0&&(j+1)<n){                 a[n-1][j+1]=k++;                 i=n-1;                 j++;                 continue;                 }        if(j==n-1&&(i-1)>=0){                   a[i-1][0]=k++;                   i--;                   j=0;                   continue;                   }        if(a[i-1][j+1]>0||(i==0&&j==n-1)){                                      a[i+1][j]=k++;                                      i++;                                      continue;                                      }         a[i-1][j+1]=k++;        i--;j++;                 }     for(int i=0;i<n;i++)    {     for(int j=0;j<n;j++)printf("%d\t",a[i][j]);      printf("\n");      }     //return a;          }    int main(){    int n=9;     //int a[n][n];     magic_circle(n);    /*for(int i=0;i<n;i++)    {     for(int j=0;j<n;j++)      printf("%d\t",a[i][j]);      printf("\n");      }*/    getchar();    return 0;    }

示例结果: