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

构造幻方的方法:
       奇数阶幻方,也就是3阶、5阶、7阶……幻方,那么如何构造这样的幻方呢?  
       我们可以采取罗伯法(也叫连续摆数法),其法则如下:  
       把“1”放在中间一列最上边的方格中,从它开始,按对角线方向(比如说按从左下到右上的方向)顺次把由小到大的各数放入各方格中,如果碰到顶,则折向底,如果到达右侧,则转向左侧,如果进行中轮到的方格中已有数或到达右上角,则退至前一格的下方。  
       按照这一法则建立5阶幻方的示例如下图:

     罗伯法(连续摆数法)的助记口诀:

1 居上行正中央,依次斜填切莫忘。

上出框界往下写,右出框时左边放。

重复便在下格填,角上出格一个样。

1 居上行正中央——数字 1 放在首行最中间的格子中

依次斜填切莫忘——向右上角斜行,依次填入数字

上出框界往下写——如果右上方向出了上边界,就以出框后的虚拟方格位置为基准,将数字竖直降落至底行对应的格子中

右出框时左边放——同上,向右出了边界,就以出框后的虚拟方格位置为基准,将数字平移至最左列对应的格子中

重复便在下格填——如果数字{N} 右上的格子已被其它数字占领,就将{N+1} 填写在{N}下面的格子中

角上出格一个样——如果朝右上角出界,和“重复”的情况做同样处理。

下面是程序代码:

#include<iostream>
#include<cstring>
#define maxn 10
using namespace std;
int main()
{int x,y,i,n;int a[maxn][maxn];memset(a,0,sizeof(a));cin>>n;x=0;y=n/2;cout<<y<<endl;a[x][y]=1;for(i=2;i<=n*n;i++)   {if(x==0&&y!=n-1)//如果碰到顶,则折向底 {x=n-1;y=y+1;a[x][y]=i;}   else  if(y==n-1&&x!=0) //碰到右边,转向左边 {x=x-1;y=0;a[x][y]=i;           }else if(a[x-1][y+1]>0||x==0&&y==n-1)//右上有数据或者到最右上角 ,退至前一格的下方 {x=x+1;a[x][y]=i;       }else {x=x-1;y=y+1;a[x][y]=i;}}for(int i=0;i<n;i++){for(int j=0;j<n;j++)cout<<a[i][j]<<"\t";cout<<endl;}return 0;
}

奇数幻方的经典解决方法--右上方填数法相关推荐

  1. 快速排序(Quick Sort)—挖坑填数法

    前面的博文讲了冒泡排序.选择排序.插入排序,今天我们谈谈快速排序! 快速排序的基本思想是: 1.先从序列中取出一个数作为基准数. 2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它 ...

  2. VS中编写Qt项目时,提取ts文件出现中文乱码的解决方法(填坑)

    总第84篇 本篇主要总结一个在开发过程中遇到的问题,方便以后参考,也方便后来者可以避免这个坑. 1.问题的产生 一般在做C++开发过程中,都会选择使用Visual Studio+Qt AddIn的环境 ...

  3. 微信小程序,垂直居中问题的经典解决方法

    选自<微信小程序开发-入门与实践>,雷磊老师编著 在编写CSS过程中,很多时候会面临如何将两个元素居中的问题,对于这种情况,在此书的6.8节中有明确的解释,这里将记录下方法. //post ...

  4. 最大子矩形问题的解决方法:悬线法

    给出一道板子题 洛谷4147 玉蟾宫 题目背景 有一天,小猫rainbow和freda来到了湘西张家界的天门山玉蟾宫,玉蟾宫宫主蓝兔盛情地款待了它们,并赐予它们一片土地. 题目描述 这片土地被分成N* ...

  5. Prezi中文/汉字字体解决方法再尝试----PPT法

    以前写过一篇关于Prezi中添加中文的博客(地址为:http://blog.csdn.net/esricd/article/details/7964281),那个方法的中心思想是修改Prezi Des ...

  6. 一次partition过程一(挖坑填数法)

    题目描述 快排的关键在于划分(partition操作),一次划分过程有很多实现的思路.请对a[1].a[2].....a[n]实现一次partition,并输出结果. 要求:使用"挖坑法&q ...

  7. 【NOIP2015】【Luogu2615】神奇的幻方(模拟填数)

    problem 给一定n*n的矩阵,要求填上1~n*n的数,使之每行.列.对角线的和都相等. n为奇数时,按如下步骤构建: 1.若(K−1)在第一行但不在最后一列,则将K填在最后一行,(K−1)所在列 ...

  8. wps linux乱码,wps文字变成了乱码解决方法

    wps文字所用内容变成了乱码,系统字体被改,该怎么恢复?对于不常用wps软件的朋友可能不太懂,下面学习啦给大家讲解wps文字变成了乱码解决方法,希望能帮到大家. wps文字变成了乱码解决方法 删除格式 ...

  9. Hive之数据倾斜的原因和解决方法

    数据倾斜 在做Shuffle阶段的优化过程中,遇到了数据倾斜的问题,造成了对一些情况下优化效果不明显.主要是因为在Job完成后的所得到的Counters是整个Job的总和,优化是基于这些Counter ...

最新文章

  1. Docker容器中挂载NFS共享目录
  2. python应用实战系列-一文教你深入解读word2vec
  3. MySQL【环境搭建 01】Linux root 用户部署 mysql-5.7.28 及 not allowed to connect to this MySQL server 和中文乱码问题处理
  4. linux系统编程之进程(八):守护进程详解及创建,daemon()使用
  5. 工作387-vant控制日期范围
  6. 哈尔滨理工C语言程序设计精髓_计算机科学与信息工程学院C语言程序设计竞赛圆满完成!...
  7. 普通的Spring Web项目正常启动,在访问某些JSP页面时,页面会报错 http://java.sun.com/jsp/jstl/core
  8. 深度学习模型在FPGA上的部署
  9. Rocket - tilelink - AtomicAutomata
  10. 干货满满,30个Python源代码!
  11. 用计算机求值根号12345,手算开根号
  12. 5064. 友好城市
  13. 11.2.0.3 RAC数据库m000进程报错ORA-04031错误的解决
  14. LPC1768的iic通讯
  15. 数影周报:SpaceX设计图纸被泄露,拍明芯城正式在纳斯达克上市
  16. 苹果手机各种型号图片_一图看懂iPhone各机型机身尺寸大小对比!
  17. 界面(1):对话框和菜单 打印和按钮等杂项
  18. openwrt 19.07报错:module ‘luci.cbi‘ not found
  19. c语言课后答案上海交通,上海交通大学继续教育学院2012春——程序设计(C)作业1(有答案)...
  20. 电影《少年的你》影评分析

热门文章

  1. 在Altium Designer中使用矢量格式的防静电标记
  2. 基于Python的图像分类-Finetune训练模型
  3. 为什么要发展跨境电商?
  4. Python入门(二十一)- 常见模块
  5. About EDW时间维度表的建立参考(DWD_CALENDAR)
  6. lz4 java 用法,LZ4参数详解
  7. mysql创建数据库CREATE DATABASE
  8. Windows根据TCP端口号查找进程PID再kill进程
  9. shiro并发登录人数控制
  10. Opencv学习_3 (Opencv读取视频 视频进度控制 写视频)