奇数幻方的经典解决方法--右上方填数法
幻方,也教纵横图,就是在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;
}
奇数幻方的经典解决方法--右上方填数法相关推荐
- 快速排序(Quick Sort)—挖坑填数法
前面的博文讲了冒泡排序.选择排序.插入排序,今天我们谈谈快速排序! 快速排序的基本思想是: 1.先从序列中取出一个数作为基准数. 2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它 ...
- VS中编写Qt项目时,提取ts文件出现中文乱码的解决方法(填坑)
总第84篇 本篇主要总结一个在开发过程中遇到的问题,方便以后参考,也方便后来者可以避免这个坑. 1.问题的产生 一般在做C++开发过程中,都会选择使用Visual Studio+Qt AddIn的环境 ...
- 微信小程序,垂直居中问题的经典解决方法
选自<微信小程序开发-入门与实践>,雷磊老师编著 在编写CSS过程中,很多时候会面临如何将两个元素居中的问题,对于这种情况,在此书的6.8节中有明确的解释,这里将记录下方法. //post ...
- 最大子矩形问题的解决方法:悬线法
给出一道板子题 洛谷4147 玉蟾宫 题目背景 有一天,小猫rainbow和freda来到了湘西张家界的天门山玉蟾宫,玉蟾宫宫主蓝兔盛情地款待了它们,并赐予它们一片土地. 题目描述 这片土地被分成N* ...
- Prezi中文/汉字字体解决方法再尝试----PPT法
以前写过一篇关于Prezi中添加中文的博客(地址为:http://blog.csdn.net/esricd/article/details/7964281),那个方法的中心思想是修改Prezi Des ...
- 一次partition过程一(挖坑填数法)
题目描述 快排的关键在于划分(partition操作),一次划分过程有很多实现的思路.请对a[1].a[2].....a[n]实现一次partition,并输出结果. 要求:使用"挖坑法&q ...
- 【NOIP2015】【Luogu2615】神奇的幻方(模拟填数)
problem 给一定n*n的矩阵,要求填上1~n*n的数,使之每行.列.对角线的和都相等. n为奇数时,按如下步骤构建: 1.若(K−1)在第一行但不在最后一列,则将K填在最后一行,(K−1)所在列 ...
- wps linux乱码,wps文字变成了乱码解决方法
wps文字所用内容变成了乱码,系统字体被改,该怎么恢复?对于不常用wps软件的朋友可能不太懂,下面学习啦给大家讲解wps文字变成了乱码解决方法,希望能帮到大家. wps文字变成了乱码解决方法 删除格式 ...
- Hive之数据倾斜的原因和解决方法
数据倾斜 在做Shuffle阶段的优化过程中,遇到了数据倾斜的问题,造成了对一些情况下优化效果不明显.主要是因为在Job完成后的所得到的Counters是整个Job的总和,优化是基于这些Counter ...
最新文章
- Docker容器中挂载NFS共享目录
- python应用实战系列-一文教你深入解读word2vec
- MySQL【环境搭建 01】Linux root 用户部署 mysql-5.7.28 及 not allowed to connect to this MySQL server 和中文乱码问题处理
- linux系统编程之进程(八):守护进程详解及创建,daemon()使用
- 工作387-vant控制日期范围
- 哈尔滨理工C语言程序设计精髓_计算机科学与信息工程学院C语言程序设计竞赛圆满完成!...
- 普通的Spring Web项目正常启动,在访问某些JSP页面时,页面会报错 http://java.sun.com/jsp/jstl/core
- 深度学习模型在FPGA上的部署
- Rocket - tilelink - AtomicAutomata
- 干货满满,30个Python源代码!
- 用计算机求值根号12345,手算开根号
- 5064. 友好城市
- 11.2.0.3 RAC数据库m000进程报错ORA-04031错误的解决
- LPC1768的iic通讯
- 数影周报:SpaceX设计图纸被泄露,拍明芯城正式在纳斯达克上市
- 苹果手机各种型号图片_一图看懂iPhone各机型机身尺寸大小对比!
- 界面(1):对话框和菜单 打印和按钮等杂项
- openwrt 19.07报错:module ‘luci.cbi‘ not found
- c语言课后答案上海交通,上海交通大学继续教育学院2012春——程序设计(C)作业1(有答案)...
- 电影《少年的你》影评分析