<delect id="sj01t"></delect>
  1. <em id="sj01t"><label id="sj01t"></label></em>
  2. <div id="sj01t"></div>
    1. <em id="sj01t"></em>

            <div id="sj01t"></div>
            C語言

            C語言實現魔方陣算法

            時間:2025-02-13 11:22:45 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>

              // Author: http://furzoom.com/

              // N為魔方階數

              #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

              {

              // if row = 0, then row = N-1, or row = row - 1

              row--;

              row = (row+N)%N;

              // if col = N, then col = 0, or col = col + 1

              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>

              // Author: http://furzoom.com/

              // N為魔方階數

              #define N 12

              int main()

              {

              int a[N][N];//存儲魔方

              int temparray[N*N/2];//存儲取出的元素

              int i;//循環變量

              int col, row;// col 列,row 行

              //初始化

              i = 1;

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

              {

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

              {

              a[row][col] = i;

              i++;

              }

              }

              //取出子方陣中對角線上的元素,且恰好按從小到大的順序排放

              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++;

              }

              }

              }

              //將取出的元素按照從大到小的順序填充到n×n方陣中

              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--;

              }

              }

              }

              //輸出方陣

              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>

              // Author: http://furzoom.com/

              // N為魔方階數

              #define N 10

              int main()

              {

              int a[N][N] = { {0} };//存儲魔方

              int i,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++)

              {

              if((i-1)%k == 0 )//前一個數是3的倍數

              {

              row++;

              }

              else

              {

              // if row = 0, then row = N-1, or row = row - 1

              row--;

              row = (row+k)%k;

              // if col = N, then col = 0, or col = col + 1

              col ++;

              col %= k;

              }

              a[row][col] = i;

              }

              //根據A生成B、C、D魔方

              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;

              }

              }

              // Swap A and C

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

              {

              if(row == k / 2)//中間行,交換從中間列向右的m列,N = 2*(2m+1)

              {

              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//其他行,交換從左向右m列,N = 2*(2m+1)

              {

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

              {

              temp = a[row][col];

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

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

              }

              }

              }

              // Swap B and D

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

              {

              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;

              }

              }

              //輸出魔方陣

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

              {

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

              {

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

              }

              printf("n");

              }

              return 0;


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

            PID算法的C語言實現07-19

            C語言中實現KMP算法實例08-09

            C語言實現歸并排序算法08-19

            希爾排序算法的C語言實現示例08-30

            C語言實現歸并排序算法實例09-18

            6種常見的排序算法的C語言實現06-18

            c#實現sunday算法實例08-07

            KMP算法的C#實現方法08-29

            C語言實現歸并排序算法實例分析06-28

            <delect id="sj01t"></delect>
            1. <em id="sj01t"><label id="sj01t"></label></em>
            2. <div id="sj01t"></div>
              1. <em id="sj01t"></em>

                      <div id="sj01t"></div>
                      黄色视频在线观看