• 魔方阵算法


    输出"魔方阵"。所谓魔方阵是指这样的方阵,它的每一行、每一列和对角线之和均相等。例如,三阶魔方阵为
          8 1 6
          3 5 7
          4 9 2
    要求输出1~n*n的自然数构成的魔方阵。

    解:魔方阵中各数的排列规律如下:

    (1)将1放在第1行的中间一列。

    (2)从2开始直到n×n止各数依次按下列规则存放:每一个数存放的行比前一个数的行数减1,列数加1(例如上面的三阶魔方阵,5在4的上一行后一列)

    (3)如果上一数的行数为1,则下一个数的行数为n(指最下一行)。例如,1在第一行,则2应放在最下一行,列数同样+1

    (4)当上一个数的列数为n时,下一个数的列数应为1,行数减1,例如,2在第3行最后一列,则3应放在第二行第一列

    (5)如果按上面规则确定的位置上已有数,或上一个数是第一行第n列时,则把下一个数放在上一个数的下面。例如,按上面的规定,4应该放在第1行第2列,但该位置已经被1占据,所以4就放在3的

    下面。由于6是第1行第3列(即最后一列),故7放在6下面。按此方法可以得到任何阶的魔方阵。

    代码:

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 #define MIN 1
     4 #define MAX 20
     5 #define EMPTY 0
     6 
     7 signed main()
     8 {
     9     int magic_square[MAX][MAX]={EMPTY};
    10     int n;
    11 
    12     printf("请输入阶数(1~15之间的奇数):");
    13     scanf("%d",&n);
    14     if( n<MIN || n>MAX || !(n%2) ) printf("输入错误,请重新输入!
    ");
    15     else{
    16         int num;
    17         const int _begin=1,_end=n*n;
    18         int row,col;
    19         for(num=_begin; num<=_end; num++){
    20             if( num==_begin ){
    21                 row=0;
    22                 col=n/2;
    23             }
    24             else{
    25                 int row_n=(row-1+n)%n;
    26                 int col_n=(col+1)%n;
    27                 if( magic_square[row_n][col_n]!=EMPTY ){
    28                     row++;
    29                 }
    30                 else{
    31                     row=row_n;
    32                     col=col_n;
    33                 }
    34             }
    35             magic_square[row][col]=num;
    36         }
    37     }
    38     int row,col;
    39     for(row=0;row<n;row++){
    40         for(col=0;col<n;col++){
    41             printf("%5d",magic_square[row][col]);
    42         }
    43         printf("
    ");
    44     }
    45     return 0;
    46 }
  • 相关阅读:
    SD卡的控制方法(指令集和控制时序)
    MDK的优化应用(转)
    SD卡的SPI模式的初始化顺序(转)
    SD卡读写扇区注意事项(转)
    MDK下调试时提示AXF文件无法导入的解决方法(转)
    把一个 int 数字 n 格式化成16进制的字符串(前面补零成0位)
    DB9 公头母头引脚定义及连接、封装
    RS232 DB9 公头 母头 串口引脚定义
    Codeforces 91C Ski Base 加边求欧拉回路数量
    Cocos Code IDE + Lua初次使用FastTiledMap的坑
  • 原文地址:https://www.cnblogs.com/wsy107316/p/12293995.html
Copyright © 2020-2023  润新知