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