判斷魔方陣c語言程式設計 魔方陣演算法及C語言實現

2021-10-13 11:24:07 字數 2692 閱讀 3109

1 魔方陣概念

2填充的,每一行、每一列、對角線之和均相等的方陣,階數n = 3,4,5…。魔方陣也稱為幻方陣。

例如三階魔方陣為:

魔方陣有什麼的規律呢?

魔方陣分為奇幻方和偶幻方。而偶幻方又分為是4的倍數(如4,8,12……)和不是4的倍數(如6,10,14……)兩種。下面分別進行介紹。

2 奇魔方的演算法

2.1 奇魔方的規律與演算法

奇魔方(階數n = 2 * m + 1,m =1,2,3……)規律如下:

數字1位於方陣中的第一行中間一列;

數字a(1 < a  ≤ n2)所在行數比a-1行數少1,若a-1的行數為1,則a的行數為n;

數字a(1 < a  ≤ n2)所在列數比a-1列數大1,若a-1的列數為n,則a的列數為1;

如果a-1是n的倍數,則a(1 < a  ≤ n2)的行數比a-1行數大1,列數與a-1相同。

2.2 奇魔方演算法的c語言實現

1 #include

2 //author:

3 //n為魔方階數

4 #define n 11

6 intmain()7 23 else

24 33 a[row][col] =i;34 }35 for(row = 0;row

3 偶魔方的演算法

偶魔方的情況比較特殊,分為階數n = 4 * m(m =1,2,3……)的情況和階數n = 4 * m + 2(m = 1,2,3……)情況兩種。

3.1 階數n = 4 * m(m =1,2,3……)的魔方(雙偶魔方)

演算法1:階數n = 4 * m(m =1,2,3……)的偶魔方的規律如下:

按數字從小到大,即1,2,3……n2順序對魔方陣從左到右,從上到下進行填充;

將魔方中間n/2列的元素上、下進行翻轉;

將魔方中間n/2行的元素左、右進行翻轉。

c語言實現

1 #include

2 //author:

3 //n為魔方階數,

4 #define n 12

6 intmain()7 21 }22

23 //翻轉中間列

24 for(row = 0; row < n/2; row ++)25 32 }33

34 //翻轉中間行

35 for(col = 0; col < n/2; col ++)36 43 }44

45 for(row = 0;row < n; row++)46 51 printf("\n");52 }53 return 0;54 }

演算法2:階數n = 4 * m(m =1,2,3……)的偶魔方的規律如下:

按數字從小到大,即1,2,3……n2順序對魔方陣從左到右,從上到下進行填充;

將魔方陣分成若干個4×4子方陣,將子方陣對角線上的元素取出;

將取出的元素按從大到小的順序依次填充到n×n方陣的空缺處。

c語言實現

1 #include

2 //author:

3 //n為魔方階數

4 #define n 12

6 intmain()7 22 }23 //取出子方陣中對角線上的元素,且恰好按從小到大的順序排放

24 i = 0;25 for(row = 0;row < n; row++)26 34 }35 }36 //將取出的元素按照從大到小的順序填充到n×n方陣中

37 i = n*n/2 -1;38 for(row = 0;row < n; row++)39 47 }48 }49 //輸出方陣

50 for(row = 0;row < n; row++)51 56 printf("\n");57 }58 return 0;59 }

3.2 階數n = 4 * m + 2(m =1,2,3……)的魔方(單偶魔方)

演算法設k = 2 * m + 1;單偶魔方是魔方中比較複雜的乙個。

將魔方分成a、b、c、d四個k階方陣,如下圖這四個方陣都為奇方陣,利用上面講到的方法依次將a、d、b、c填充為奇魔方。

交換a、c魔方元素,對魔方的中間行,交換從中間列向右的m列各對應元素;對其他行,交換從左向右m列各對應元素。

交換b、d魔方元素,交換從中間列向左m – 1列各對應元素。

c語言實現

#include

//author:

//n為魔方階數

#define n 10

intmain()

};//儲存魔方

inti,k,temp;int col,row;//col 列,row 行//初始化

k = n / 2;

col= (k-1)/2;

row= 0;

a[row][col]= 1;//生成奇魔方a

for(i = 2; i <= k*k; i++)

else//根據a生成b、c、d魔方

for(row = 0;row < k; row++)

//swap a and c

for(row = 0;row < k;row++)

else//其他行,交換從左向右m列,n = 2*(2m+1)

//swap b and d

for(row = 0; row < k;row++)//交換中間列向左m-1列,n = 2*(2m+1)

//輸出魔方陣

for(row = 0;row < n; row++)

return 0;

你若要放棄,那我就可以安慰自己了,因為這樣我不再孤獨了,可以參考

魔方陣 c語言程式設計

奇數魔方陣 每一行 每一列且對角線上的元素之和均相等,且每乙個元素由1 n 2的自然數組成,n為魔方陣的階數。奇數魔方陣遵循的規律 1放在第一行中間,從2開始起,下乙個數比上乙個數行數減1,列數加1 如果上乙個數在第1行那麼下乙個數在第n行 如果上乙個數在第n列那麼下乙個數在第1列 如果下乙個數的位...

魔方陣演算法

輸出 魔方陣 所謂魔方陣是指這樣的方陣,它的每一行 每一列和對角線之和均相等。例如,三階魔方陣為 8 1 6 3 5 7 4 9 2 要求輸出1 n n的自然數構成的魔方陣。解 魔方陣中各數的排列規律如下 1 將1放在第1行的中間一列。2 從2開始直到n n止各數依次按下列規則存放 每乙個數存放的行...

魔方陣1 奇階魔方陣

魔方陣 古代又稱 縱橫圖 是指組成元素為自然數1 2 n2的平方的n n的方陣,其中每個元素值都不相等,且每行 每列以及主 副對角線上各n個元素之和都相等。魔方陣分為奇階魔方陣和偶階魔方陣,偶階魔方陣又分為能被四整除和不能被四整除兩種,今天來給大家講解奇階魔方陣,後續會為大家補充剩餘的魔方陣。奇階魔...