1. 程式人生 > >求n階幻方的一種演算法實現C/C++

求n階幻方的一種演算法實現C/C++

求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;
    }

示例結果: