輸出奇數N階魔方陣(幻方陣)
阿新 • • 發佈:2019-02-15
從鍵盤輸入一個奇數N,輸出N階“魔方陣”。
所謂魔方陣是指這樣的方陣,它的每一行、每一列和對角線之和均相等。例如3階魔方陣為:
8 1 6
3 5 7
4 9 2
魔方陣的奇數排列規律是:
(1) 將1放在第一行中間一列;
(2) 從2開始直到n×n止各數依次按下列規則存放:
按 45°方向向右上走,每一個數存放的行比前一個數的行數減1,列數加1;
(3) 如果行列範圍超出矩陣範圍,則迴繞。
例如1在第1行,則2應放在最後一行,列數同樣加1;
又如某個數在第n列,則下一個數應放在第一列,行數同樣減1;
(4) 如果按上面規則確定的位置上已有數,或上一個數是第1行第n列時,則把下一個數放在上一個數的下面。
演算法實現
void rubikCube(int n) { int cube[n][n],k,i,j; for (i=0; i<n; i++) { //初始化陣列賦0值 for (j=0; j<n; j++) { cube[i][j]=0; } } i=0; //確定1的下標 j=n/2; for (k=1; k<=n*n; k++) { //依次錄入所有數共n*n個 cube[i][j]=k; if (cube[(i-1+n)%n][(j+1+n)%n]==0) { i=(i-1+n)%n; j=(j+1+n)%n; } else { //位置上已有數的情況 i=(i+1+n)%n; } } for (i=0; i<n; i++) { //魔方陣列印輸出 for (j=0; j<n; j++) { printf("%d\t",cube[i][j]); } printf("\n"); } printf("\n"); }