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