1 奇数阶幻方构造法

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

(2) 从2开始直到n×n止各数依次按下列规则存放:按 45°方向行走,向右上,即每一个数存放的行比前一个数的行数减1,列数加1

(3) 如果行列范围超出矩阵范围,则回绕。例如1在第1行,则2应放在最下一行,列数同样加1;

(4) 如果按上面规则确定的位置上已有数,或上一个数是第1行第n列时,则把下一个数放在上一个数的下面。

#include<iostream>
#include<algorithm>
#include<cstring>
#include<vector>
#include<stdio.h>
#include<stdlib.h>
#include<queue>
#include<math.h>
#include<map>
#define INF 0xffffffff
#define MAX 1005
#define Temp 1000000000
#define MOD 1000000007using namespace std;int Map[MAX][MAX];void MagicSquare(int n)
{Map[1][(n+1)/2]=1;//首先填第一行中间列 1int x=1,y=(n+1)/2;for(int i=2;i<=n*n;i++){if(x==1 && y==n)//若当前位置为(1,n)则下一个数填到当前数字下方
        {x=x+1;y=y;Map[x][y]=i;continue;}if(y==n)//若超出边界则回绕
        {if(Map[x-1][1]==-1){x=x-1;y=1;Map[x][y]=i;}else{x=x+1;Map[x][y]=i;}continue;}if(x==1)//若超出边界则回绕
        {if(Map[n][y+1]==-1){x=n;y=y+1;Map[x][y]=i;}else{x=x+1;Map[x][y]=i;}continue;}else//向右上方填
        {if(Map[x-1][y+1]!=-1)//若右上方已有数字,当前数字填当前位置下方
            {x=x+1;y=y;Map[x][y]=i;}else{x=x-1;y=y+1;Map[x][y]=i;}continue;}}
}int main()
{int n;while(scanf("%d",&n)!=EOF){memset(Map,-1,sizeof(Map));MagicSquare(n);for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){printf("%d%c",Map[i][j],j==n?'\n':' ');}}}return 0;
}

View Code

转载于:https://www.cnblogs.com/alan-W/p/6008863.html

689D Magic Odd Square 奇数幻方相关推荐

  1. Educational Codeforces Round 16 C. Magic Odd Square 矩阵构造

    传送门 文章目录 题意: 思路: 题意: 给你一个奇数nnn,让你构造一个n∗nn*nn∗n的矩阵,矩阵的每个位置依次填上[1,n∗n]之内的数[1,n*n]之内的数[1,n∗n]之内的数,满足每行. ...

  2. Magic Odd Square 思维

    Find an n × n matrix with different numbers from 1 to n2, so the sum in each row, column and both ma ...

  3. 【模拟】Codeforces 710C Magic Odd Square

    题目链接: http://codeforces.com/problemset/problem/710/C 题目大意: 构造一个N*N的幻方.任意可行解. 幻方就是每一行,每一列,两条对角线的和都相等. ...

  4. 奇数阶幻方法C语言运用指针,奇数幻方的构造方法(转载)

    幻方简介 幻方又称魔方,是一组排放在正方形中的整数组成,其中每行.每列以及两条对角线上数之和均相等.通常幻方从1到N2的连续整数组成,其中N为正方形的行(也是列)的数目.所以N阶幻方有N行N列,由整数 ...

  5. c 语言奇数幻方代码,【C】——幻方算法(示例代码)

    一.幻方按照阶数可分成了三类,即奇数阶幻方.双偶阶幻方.单偶阶幻方. 二.奇数阶幻方(劳伯法) 奇数阶幻方最经典的填法是罗伯法.填写的方法是: 把1(或最小的数)放在第一行正中:按以下规律排列剩下的( ...

  6. 使用jquery实现隔行换色($(tbody tr:odd)获取奇数行和$(tbody tr:even)获取偶数行)以及CSS类操作addClass()的使用

    使用jquery实现隔行换色 技术分析 最主要的就是jquery的选择器 获取tbody的奇数行("tbodytr:odd")设置背景颜色在获取tbody的偶数行("tb ...

  7. 奇数幻方的经典解决方法--右上方填数法

    幻方,也教纵横图,就是在n×n的方阵中放入1到n 2个自然数:在一定的布局下,其各行.各列和两条对角线上的数字之和正好都相等.这个和数就叫做"幻方常数"或幻和. 构造幻方的方法: ...

  8. HDU - 1998 奇数阶魔方

    传送门 文章目录 题意: 思路: 题意: 给你一个奇数nnn,构造一个nnn阶幻方. 3≤n≤193\le n\le 193≤n≤19 思路: 模板题了,直接构造一个幻方即可. 首先在第一行中间放一个 ...

  9. 2016区域赛前冲刺训练

    UPD 2016.10.23 shift-and (2题) Codeforces 训练 现在已经完成了: 191 [Codeforces Round #377] (6/6) Div 2 A Buy a ...

最新文章

  1. 美多商城之商品(首页广告)
  2. 供应商管理(Supplier Management)
  3. 添加softmax层_PyTorch入门之100行代码实现softmax回归分类
  4. mysql5.7 忘记root密码后,如何找回密码?
  5. warning C4091: “typedef ”: 没有声明变量时忽略“_matcher”的左侧
  6. suse查看mysql内存使用情况_MySQL 慢查询日志(Slow Query Log)
  7. 1582年日历怎么了_【知乎周边】知乎2020年日历开箱+测评
  8. 通达oa wbupload.php,关于通达OA上传附件类型限制的设置
  9. 数论 —— 毕达哥拉斯三元组
  10. 在2003上实现Custom Task Pane
  11. 论述计算机辅助设计技术主要包括的内容,计算机辅助设计复习思考题
  12. 安卓10不支持qmc解码_国产定制ROM玩烂了的功能,最新安卓11原生系统确定不支持...
  13. This request has been blocked; the content must be served over HTTPS
  14. 关于MATLAB未定义函数或变量 ‘wavread‘的很简单的解决办法
  15. 如何用计算机环境设计,计算机绘图软件在环境艺术设计中运用.doc
  16. 哪种款式的耳机不伤耳朵,五款不伤害耳朵听力的骨传导耳机推荐
  17. c语言编写一个简单的答题系统
  18. DNS故障的几种常见原因及解决方法
  19. 一个普通的小活动让超市回头客源源不断?方案简单到爆
  20. pagehelper里的PageInfo自定义分页

热门文章

  1. 如何设置 homestead zhong redis 开机自启_CentOS安装Redis
  2. Linux16.04安装Matlab2016b详细教程
  3. [机器学习]gcForest算法理解
  4. 【labelme】改造labelme
  5. BLAS+BLACS+LAPACK+SCALAPACK安装
  6. 美国人口普查年收入比赛_训练网络对收入进行分类:成人普查收入数据集
  7. Android USB 属性设置:ADB、RNDIS、MTP等
  8. 《现代语音信号处理》(胡航著)第1-6章简介
  9. C++ 输出调试信息 类似MFC的TRACE等宏
  10. C语言实现上三角蛇形矩阵不用数组,蛇形矩阵c语言实现