C++實現奇數魔方陣

jopen 9年前發布 | 1K 次閱讀 C/C++

/*
    魔方陣,古代又稱“縱橫圖”,是指組成元素為自然數1、2…n的平方的n×n的方陣,
    其中每個元素值都不相等,且每行、每列以及主、副對角線上各n個元素之和都相等。
    輸入一個奇數,實現奇數魔方陣。

附:奇數魔方陣的實現方法
        (1) 將1填入第一行中間;
      (2) 將每個數填在前一個數的右上方。
      (3) 若該位置超出最上行,則改填在最下行的對應位置;
      (4) 若該位置超出最右列,則該填在最左列的對應行位置;
      (5) 若某元素填在第一行最右列,下一個數填在該數同列的下一行;

   (6) 若某數已填好,但其右上角已填了其他數據,則下一個數填在該數同列的下一行位置。 */

include <stdio.h>

include <math.h>

void main() { int a[16][16],i,j,n,k;

printf("Please input  n(1~15,it must be odd.): ");
scanf("%d",&n);

while( !(n>=1&&n<=15) || n%2==0 )
{
    printf("The number is invalid.Please insert again:");
    scanf("%d",&n);
}


printf("\n");    //矩陣的初始化
for(i=1;i<=n;i++)
    for(j=1;j<=n;j++)
        a[i][j]=0;

j=n/2+1;
a[1][j]=1;
i=1;

for(k=2;k<=n*n;k++)
{
    i=i-1;
    j=j+1;

    if( i==0 && j==n+1 )
    {
        i=i+2;
        j=j-1;
    }
    else
    {
        if(i==0)
        {
            i=n;
        }
        if(j==n+1)
        {
            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<=n;i++)
{
    for(j=1;j<=n;j++)
        printf("%4d",a[i][j]);
    printf("\n");
}

}</pre>

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!