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