<address id="ousso"></address>
<form id="ousso"><track id="ousso"><big id="ousso"></big></track></form>
  1. C語言實現魔方陣算法

    時間:2025-09-20 23:07:59 C語言

    C語言實現魔方陣算法

      魔方陣分為奇幻方和偶幻方,本文特意為大家收集整理了C語言實現魔方陣算法,希望大家喜歡!

      例如三階魔方陣為:

      C語言實現魔方陣算法(幻方陣 奇魔方 單偶魔方實現)1

      魔方陣有什么的規律呢?

      魔方陣分為奇幻方和偶幻方。而偶幻方又分為是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語言實現

      復制代碼 代碼如下:

      #include <stdio.h>

      /pic/pic/

      /pic/p>

      #define N 11

      int main()

      {

      int a[N][N];

      int i;

      int col,row;

      col = (N-1)/2;

      row = 0;

      a[row][col] = 1;

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

      {

      if((i-1)%N == 0 )

      {

      row++;

      }

      else

      {

      /pic/p>

      row--;

      row = (row+N)%N;

      /pic/p>

      col ++;

      col %= N;

      }

      a[row][col] = i;

      }

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

      {

      for(col = 0;col < N; col ++)

      {

      printf("%6d",a[row][col]);

      }

      printf("n");

      }

      return 0;

      }

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

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

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

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

      C語言實現

      復制代碼 代碼如下:

      #include <stdio.h>

      /pic/pic/

      /pic/p>

      #define N 12

      int main()

      {

      int a[N][N];/pic/p>

      int temparray[N*N/2];/pic/p>

      int i;/pic/p>

      int col, row;/pic/p>

      /pic/p>

      i = 1;

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

      {

      for(col = 0;col < N; col ++)

      {

      a[row][col] = i;

      i++;

      }

      }

      /pic/p>

      i = 0;

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

      {

      for(col = 0;col < N; col ++)

      {

      if((col % 4 == row % 4) || ( 3 == ( col % 4 + row % 4)))

      {

      temparray[i] = a[row][col];

      i++;

      }

      }

      }

      /pic/p>

      i = N*N/2 -1;

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

      {

      for(col = 0;col < N; col ++)

      {

      if((col % 4 == row % 4) || ( 3 == ( col % 4 + row % 4)))

      {

      a[row][col] = temparray[i];

      i--;

      }

      }

      }

      /pic/p>

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

      {

      for(col = 0;col < N; col ++)

      {

      printf("%5d",a[row][col]);

      }

      printf("n");

      }

      return 0;

      }

      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魔方元素,交換

      復制代碼 代碼如下:

      #include <stdio.h>

      /pic/pic/

      /pic/p>

      #define N 10

      int main()

      {

      int a[N][N] = { {0} };/pic/p>

      int i,k,temp;

      int col,row;/pic/p>

      /pic/p>

      k = N / 2;

      col = (k-1)/2;

      row = 0;

      a[row][col] = 1;

      /pic/p>

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

      {

      if((i-1)%k == 0 )/pic/p>

      {

      row++;

      }

      else

      {

      /pic/p>

      row--;

      row = (row+k)%k;

      /pic/p>

      col ++;

      col %= k;

      }

      a[row][col] = i;

      }

      /pic/p>

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

      {

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

      {

      a[row+k][col+k] = a[row][col] + k*k;

      a[row][col+k] = a[row][col] + 2*k*k;

      a[row+k][col] = a[row][col] + 3*k*k;

      }

      }

      /pic/p>

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

      {

      if(row == k / 2)/pic/p>

      {

      for(col = k / 2; col < k - 1; col++)

      {

      temp = a[row][col];

      a[row][col] = a[row + k][col];

      a[row + k][col] = temp;

      }

      }

      else/pic/p>

      {

      for(col = 0;col < k / 2;col++)

      {

      temp = a[row][col];

      a[row][col] = a[row + k][col];

      a[row + k][col] = temp;

      }

      }

      }

      /pic/p>

      for(row = 0; row < k;row++)/pic/p>

      {

      for(i = 0;i < (k - 1)/2 - 1;i++)

      {

      temp = a[row][k+ k/2 - i];

      a[row][k+ k /2 -i] = a[row + k][k+k/2 -i];

      a[row + k][k+k/2 -i] = temp;

      }

      }

      /pic/p>

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

      {

      for(col = 0;col < N; col ++)

      {

      printf("%5d",a[row][col]);

      }

      printf("n");

      }

      return 0;


    【C語言實現魔方陣算法】相關文章:

    PID算法的C語言實現02-24

    C語言中實現KMP算法實例12-14

    C語言實現歸并排序算法02-04

    希爾排序算法的C語言實現示例02-06

    C語言實現歸并排序算法實例07-13

    6種常見的排序算法的C語言實現10-25

    C語言基本算法12-29

    c語言的排序算法01-15

    C語言實現歸并排序算法實例分析01-25

    <address id="ousso"></address>
    <form id="ousso"><track id="ousso"><big id="ousso"></big></track></form>
    1. 日日做夜狠狠爱欧美黑人