• 【C++小白成长撸】--(续)双偶数N阶魔阵


    原理:

    1. 把双偶数N阶魔阵均分为(N/4)^2个4阶魔阵(4*4)
    2. 每个魔阵的对角线都标为“-1”,其余位置标为“0”
    3. 从第一个位置(a[0][0])从左到右,从上到下(例如:a[0][0],a[0][1]……a[0][3],a[1][0])用自然数(从1开始)依次填充,每次填充数加一,遇到-1,跳过,但自然数继续计数
    4. 当第三步全部完成后,从最下面一个位置(a[3][3]),从右到左,从下到上,计数从1开始,每次填充数加一,遇到填充了的位置,跳过,但自然数继续计数。

    4阶魔阵示意图

     1 /*程序的版权和版本声明部分:
     2 **Copyright(c) 2016,电子科技大学本科生
     3 **All rights reserved.
     4 **文件名:双偶数N阶魔阵
     5 **程序作用:双偶数N阶魔阵
     6 **作者:Amoshen
     7 **完成日期:2016.10.31
     8 **版本号:V1.0
     9 */
    10 #include <iostream>
    11 
    12 using namespace std;
    13 
    14 #define MAX_SIZE 100
    15 
    16 int main(void)
    17 {
    18     int N,k,i,j,m1,m2,c = 1;//j,m1  m2,j代表行和列
    19     int magic[MAX_SIZE][MAX_SIZE] = {0},b[MAX_SIZE][MAX_SIZE] = {0};//0代表没有数字
    20 
    21     cout << "本程序实现双偶数N阶幻方矩阵,n = 4K.例如,如果要得到4阶幻方,请输入1"<<endl;
    22     cout << "k = ";
    23     cin >> k;
    24 
    25     N = 4 * k;
    26 
    27     //标识对角线不为空,用-1代表
    28     for(m1 = 1;m1 <= k;m1++)
    29     {
    30         for(m2 = 1;m2 <= k;m2++)
    31         {
    32             for(i = 4 * (m1 - 1),j = 4 * (m2 - 1);i < (4*m1);)
    33             {
    34                 b[i][j] = -1;
    35                 i = i + 1;
    36                 j = j + 1;
    37             }
    38             for(i = 4 * (m1 - 1) + 3,j = 4 * (m2 - 1);j < (4 * m2);)
    39             {
    40                 b[i][j] = -1;
    41                 i = i - 1;
    42                 j = j + 1;
    43             }
    44         }
    45     }
    46 
    47     //填充魔方矩阵
    48 
    49     for(i = 0;i < N;i++)
    50     {
    51         for(j = 0;j < N;j++,c++)
    52         {
    53             if(b[i][j] == -1)
    54             {
    55                 continue;
    56             }
    57             else
    58             {
    59                 magic[i][j] = c;
    60             }
    61         }
    62     }
    63 
    64     c = 1;
    65 
    66     for(i = (N - 1);i >= 0;i--)
    67     {
    68         for(j = (N - 1);j >= 0;j--,c++)
    69         {
    70             if(b[i][j] == 0)
    71             {
    72                 continue;
    73             }
    74             else
    75             {
    76                 magic[i][j] = c;
    77             }
    78         }
    79     }
    80 
    81     //输出
    82 
    83     cout << N <<"阶幻方矩阵:"<<endl;
    84 
    85     for(i = 0;i < N;i++)
    86     {
    87         for(j = 0;j < N;j++)
    88         {
    89             cout << magic[i][j] << '	';
    90         }
    91 
    92         cout << endl;
    93     }
    94 }
  • 相关阅读:
    动态与静态Include
    java回收算法
    reflection是如何工作的。
    hashcode和equals的约定关系如下
    Java调试器
    混合赋值运算符的使用
    Spring
    Math.?
    oracle--触发器(转)
    oracle --游标详解(转)
  • 原文地址:https://www.cnblogs.com/zpc-uestc/p/6017672.html
Copyright © 2020-2023  润新知