中易网

用c语言求幻方. 给定任意自然数n>3,要求输出相应的n阶幻方. 如,给定n=7,就输出所有的由1

答案:1  悬赏:20  
解决时间 2021-01-17 12:00
  • 提问者网友:心牵心
  • 2021-01-17 05:14
用c语言求幻方. 给定任意自然数n>3,要求输出相应的n阶幻方. 如,给定n=7,就输出所有的由1
最佳答案
  • 二级知识专家网友:第幾種人
  • 2021-01-17 05:59
只实现了奇数的情况,其他情况参照百度百科。

#include
#include
#include

void magic(int);
void magic1(int);
void magic4(int);
void magic42(int);

void magic(int n)
{
    if(n==1)
    {
         printf("1
");
         return;
    }
    if(n==2)
    {
        printf("不存在
"); 
        return; 
    }    
    if(n%2==1)
    {
        magic1(n);
        return;
    }
    else if(n%4==0)
    {
        magic4(n);
        return;    
    }
    else 
    {
        magic42(n);
        return;
    }
}
void magic1(int n)
{
    int **a = (int **)malloc(sizeof(int*)*n);
    int i;
    int j;
    int k;
    
    for(i=0;i    {
        a[i]=(int *)malloc(sizeof(int)*n);       
    }
    
    for(i=0; i    {
        for(j=0; j        {
            a[i][j]=0;
        }
    }
    //首先确定1的位置,在第一行中间列。
    j=n/2;
    a[0][j]=1;
    for(k=2; k<=n*n; k++)
    {
        i--;
        j++;
        //保证行列数的循环。
        if(i<0)
        {
            i=n-1;
        }
        if(j>n-1)
        {
            j=0;
        }
        if(a[i][j]==0)
        {
            a[i][j]=k;
        }
        else
        {
            i=(i+2)%n;
            j=(j-1+n)%n;
            a[i][j]=k;
        }
    }
    printf("

");
    for(i=0; i    {
        printf(" ");
        for(j=0; j        {
            printf("%d ",a[i][j]);
        }
        printf("

");
    }
    for(i=0;i    {
        free(a[i]);
    }
    free(a);
    return;
}

void magic4(int n)
{
    return;    
}

void magic42(int n)
{
    return;
}
int  main()
{
     int n;
     while(scanf("%d",&n) != EOF)
     {
         magic(n);
     }   
}




我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息!
大家都在看
推荐信息