用C語言編程玩轉(zhuǎn)魔方陣小游戲

奇數(shù)魔方陣

奇數(shù)魔方陣就是將數(shù)字排列在nxn(n為奇數(shù))的方陣上,要求滿足各行、各列與各對角線的和相同。如下圖所示,是n=5的奇數(shù)魔方陣。

填魔方陣的方法以奇數(shù)魔方陣最為簡單,第一個(gè)數(shù)字放在第一行的正中央(填了1),然后向右(左)上填,如果右(左)上已有數(shù)字,則向下填,如下圖所示:

一般程序語言的陣列多由0開始,為了計(jì)算方便,我們利用索引1到n的部份,而在計(jì)算是向右(左)上或向下時(shí),我們可以將索引值除以n值,如果得到余數(shù)為1就向下,否則就往右(左)上。

#include

#include

#define N 5

int main(void) {

int i, j, key;

int square[N+1][N+1] = ;

i = 0;

j = (N+1) / 2;

for(key = 1; key

if((key % N) == 1)

i++;

else {

i--;

j++;

}

if(i == 0)

i = N;

j = 1;

square[i][j] = key;

}

for(i = 1; i

for(j = 1; j

printf("%2d ", square[i][j]);

printf(" ");

}

return 0;

}

4N 魔方陣

與奇數(shù)魔術(shù)方陣相同,在于求各行、各列與各對角線的和相等,不同的是這次方陣的維度是4的倍數(shù)。

先來看看4X4方陣的解法:

簡單的說,就是一個(gè)從左上由1依序開始填,但遇對角線不填,另一個(gè)由左上由16開始填,但只填在對角線,再將兩個(gè)合起來就是解答了。如果N大于等于2,則以 4X4為單位畫對角線,如下所示:

至于對角線的位置該如何判斷,有兩個(gè)公式,有興趣的可以畫圖印證,如下:

左上至右下:j % 4 == i % 4

右上至左下:(j % 4 + i % 4) == 1

8階魔方陣(N=2)的結(jié)果如下:

#include

#include

#define N 8

int main(void) {

int i, j;

int square[N+1][N+1] = ;

for(j = 1; j

for(i = 1; i

if(j % 4 == i % 4 || (j % 4 + i % 4) == 1)

square[i][j] = (N+1-i) * N -j + 1;

else

square[i][j] = (i - 1) * N + j;

}

}

for(i = 1; i

for(j = 1; j

printf("%2d ", square[i][j]);

printf(" ");

}

return 0;

}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容