java实现—n阶奇数幻方
来源:互联网 发布:mac用hdmi连接电视 编辑:程序博客网 时间:2024/04/30 05:33
奇数阶幻方:
奇数阶幻方指的是有一个行数和列数都相等的数据组成一个方阵,即由1~n*n个数据组成,由于是奇数阶幻方,所以阶数n必须是奇数。
其要求为:每行、每列和对角线上的数据之和相等。
法国人罗伯总结出了构造奇数阶连续自然数幻方的简单易行的方法“罗伯法”。口诀如下:
一居上行正中央:
第一个数字放在首行最中间的格子中;
依次斜填切莫忘:
向右上角斜行按照从小到大的顺序依次填入数字;
上出框时向下放:
如果右上方向出了上边界,就以出框后的虚拟方格位置为基准,将数字竖直降落至底行对应的格子中;
右出框时左边放:
同上,向右出了边界,就以出框后的虚拟方格位置为基准,将数字平移至最左列对应的格子中;
重复便在下格填:
如果数字右上的格子已被其它数字占领,将该数字填写在下面的格子中;
右上重复一个样:
如果朝右上角出界,和上面重复的情况做同样处理,依然放在下方。
相关java代码如下:
package test1;import java.util.Scanner;//奇数阶幻方的实现public class Practice { //n为用户输入的n阶奇数幻方 n为奇数 public static int[][] magicOdd(int n) { //构造一个(n+2)*(n+2)矩阵 int[][] square = new int[n + 1][n + 1]; int i = 0; int j = (n + 1) / 2; //从第一行的中间那个数字(是1)开始填幻方 //n阶幻方一共有n*n个数字(从1~n*n) //奇数阶幻方的实现算法 for (int key = 1; key <= n * n; key++) { if ((key % n) == 1) i++; else { // //填充当前数的右上角那个数 i--; j++; } if (i == 0) { ////判断条件:若是在(n+2)*(n+2)阶方阵的第一行 i = n; } if (j > n) { j = 1; } square[i][j] = key; } //对(n+2)*(n+2)阶的方阵进行筛选出中间的n*n阶幻方 int[][] matrix = new int[n][n]; for (int k = 0; k < matrix.length; k++) { for (int l = 0; l < matrix[0].length; l++) { matrix[k][l] = square[k + 1][l + 1]; } } return matrix; } public static void main(String[] args) { Scanner a=new Scanner(System.in); int b=a.nextInt(); //b为用户输入的奇数 System.out.println(); int[][] magic = Practice.magicOdd(b); for (int k = 0; k < magic.length; k++) { for (int l = 0; l < magic[0].length; l++) { System.out.print(magic[k][l] + " "); } System.out.println(); } } }
测试结果图如下:
根据图中显示的幻方(以3阶幻方为例,讲解口诀)。第一个数字放在正中间,然后右斜上方依次填写数字,数字3的右斜上方已经有1存在了,故而将4放在3的下方,再依次进行右斜上方填写数字。
阅读全文
1 0
- java实现—n阶奇数幻方
- n阶奇数幻方
- 编程实现N阶奇数幻方游戏
- (纵横图问题)(n阶奇数幻方)
- 奇数幻方的实现
- 奇数幻方和双偶幻方(java实现)
- 幻方(奇数阶&&4*n阶&&4*n+2阶)
- 输入一个奇数n,构造并输出一个n阶等和幻方
- N(奇数)阶幻方-java实现代码
- 奇数幻方的实现及其验证
- 39.判断N*N(规定N为奇数)的矩阵是否为幻方
- 任意阶奇数幻方C程序
- 奇数幻方
- 奇数幻方
- 奇数幻方构造
- 奇数幻方
- 给一个奇数阶N幻方,填入数字1,2,3…N*N,使得横竖斜方向上的和都相同
- 奇数和偶数幻方
- LeetCode--Trapping Rain Water(捕获雨水)Python
- EventBus的简单使用
- 部分安卓手机点击输入框,输入法会将输入框遮住问题
- 物料主档屏幕增强实例一.
- php环境搭建phpeclipse
- java实现—n阶奇数幻方
- shell脚本变量$#,$*,$$,$@,$0,$1,$2,$?的含义
- EA13 反向工程中文乱码解决方案
- C/C++语言宏的冷知识,内置宏,__FILE__,__LINE__,##, 可变参的宏...和__VA_ARGS__
- SpringBoot外置tomcat
- Android 之路8---Java基础4
- MyBatis配置:在控制台打印SQL语句
- oracle数据库中varchar2陷阱
- Java设计模式之单例模式