av手机免费在线观看,国产女人在线视频,国产xxxx免费,捆绑调教一二三区,97影院最新理论片,色之久久综合,国产精品日韩欧美一区二区三区

C語(yǔ)言

C語(yǔ)言實(shí)現(xiàn)魔方陣算法

時(shí)間:2025-02-13 11:22:45 C語(yǔ)言 我要投稿
  • 相關(guān)推薦

C語(yǔ)言實(shí)現(xiàn)魔方陣算法

  魔方陣分為奇幻方和偶幻方,本文特意為大家收集整理了C語(yǔ)言實(shí)現(xiàn)魔方陣算法,希望大家喜歡!

  例如三階魔方陣為:

  C語(yǔ)言實(shí)現(xiàn)魔方陣算法(幻方陣 奇魔方 單偶魔方實(shí)現(xiàn))1

  魔方陣有什么的規(guī)律呢?

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

  2 奇魔方的算法

  2.1 奇魔方的規(guī)律與算法

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

  數(shù)字1位于方陣中的第一行中間一列;

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

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

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

  2.2 奇魔方算法的C語(yǔ)言實(shí)現(xiàn)

  復(fù)制代碼 代碼如下:

  #include <stdio.h>

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

  // N為魔方階數(shù)

  #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:階數(shù)n = 4 * m(m =1,2,3……)的偶魔方的規(guī)律如下:

  按數(shù)字從小到大,即1,2,3……n2順序?qū)δХ疥噺淖蟮接,從上到下進(jìn)行填充;

  將魔方陣分成若干個(gè)4×4子方陣,將子方陣對(duì)角線上的元素取出;

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

  C語(yǔ)言實(shí)現(xiàn)

  復(fù)制代碼 代碼如下:

  #include <stdio.h>

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

  // N為魔方階數(shù)

  #define N 12

  int main()

  {

  int a[N][N];//存儲(chǔ)魔方

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

  int i;//循環(huán)變量

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

  //初始化

  i = 1;

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

  {

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

  {

  a[row][col] = i;

  i++;

  }

  }

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

  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 階數(shù)n = 4 * m + 2(m =1,2,3……)的魔方(單偶魔方)

  算法

  設(shè)k = 2 * m + 1;單偶魔方是魔方中比較復(fù)雜的一個(gè)。

  將魔方分成A、B、C、D四個(gè)k階方陣,如下圖這四個(gè)方陣都為奇方陣,利用上面講到的方法依次將A、D、B、C填充為奇魔方。

  交換A、C魔方元素,對(duì)魔方的中間行,交換從中間列向右的m列各對(duì)應(yīng)元素;對(duì)其他行,交換從左向右m列各對(duì)應(yīng)元素。

  交換B、D魔方元素,交換

  復(fù)制代碼 代碼如下:

  #include <stdio.h>

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

  // N為魔方階數(shù)

  #define N 10

  int main()

  {

  int a[N][N] = { {0} };//存儲(chǔ)魔方

  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 )//前一個(gè)數(shù)是3的倍數(shù)

  {

  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;

  }

  //根據(jù)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語(yǔ)言實(shí)現(xiàn)魔方陣算法】相關(guān)文章:

PID算法的C語(yǔ)言實(shí)現(xiàn)07-19

C語(yǔ)言中實(shí)現(xiàn)KMP算法實(shí)例08-09

C語(yǔ)言實(shí)現(xiàn)歸并排序算法08-19

希爾排序算法的C語(yǔ)言實(shí)現(xiàn)示例08-30

C語(yǔ)言實(shí)現(xiàn)歸并排序算法實(shí)例09-18

6種常見(jiàn)的排序算法的C語(yǔ)言實(shí)現(xiàn)06-18

c#實(shí)現(xiàn)sunday算法實(shí)例08-07

KMP算法的C#實(shí)現(xiàn)方法08-29

C語(yǔ)言實(shí)現(xiàn)歸并排序算法實(shí)例分析06-28