Home  >  Article  >  Database  >  魔方阵,古代又称“纵横图”,是指组成元素为自然数1、2…n的平

魔方阵,古代又称“纵横图”,是指组成元素为自然数1、2…n的平

WBOY
WBOYOriginal
2016-06-07 15:36:312199browse

如3×3的魔方阵: 816 357 492 魔方阵的排列规律如下: (1)将1放在第一行中间一列; (2)从2开始直到n×n止各数依次按下列规则存放;每一个数存放的行比前一个数的行数减1,列数加1(例如上面的三阶魔方阵,5在4的上一行后一列); (3)如果上一个数的行数为1

如3×3的魔方阵: 
    8   1   6 
    3   5   7 
    4   9   2  
魔方阵的排列规律如下:
(1)将1放在第一行中间一列;
(2)从2开始直到n×n止各数依次按下列规则存放;每一个数存放的行比前一个数的行数减1,列数加1(例如上面的三阶魔方阵,5在4的上一行后一列);
(3)如果上一个数的行数为1,则下一个数的行数为n(指最下一行);例如1在第一行,则2应放在最下一行,列数同样加1;
(4)当上一个数的列数为n时,下一个数的列数应为1,行数减去1。例如2在第3行最后一列,则3应放在第二行第一列;

(5)如果按上面规则确定的位置上已有数,或上一个数是第一行第n列时,则把下一个数放在上一个数的下面。例如按上面的规定,4应该放在第1行第2列,但该位置已经被占据,所以4就放在3的下面;

#include
int main()
{
    int a[15][15],i,j,k,p,n;
    p=1;
    while(p==1)
    {
        printf("enter n(n=1--15):");
        scanf("%d",&n);
        if((n!=0)&&(n             p=0;
    }
    for(i=1;i         for(j=1;j             a[i][j]=0;
    j=n/2+1;
    a[1][j]=1;
    for(k=2;k         {
            i=i-1;
            j=j+1;
            if(in)
            {
                i=i+2;
                j=j-1;
            }
            else
            {
                if(i                 if(j>n)j=1;
            }
            if(a[i][j]==0)
                a[i][j]=k;
            else
            {
                i=i+2;
                j=j-1;
                a[i][j]=k;
            }
        }
    for(i=1;i         {
            for(j=1;j             printf("%5d",a[i][j]);
            puts("");
        }
    return 0;
}

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn