奇数阶幻方
来源:互联网 发布:淘宝卖家钻石等级 编辑:程序博客网 时间:2024/06/15 07:16
package MagicSquare;//奇数幻方的实现public class Magic_Odd { //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)阶方阵的第一行 if(j==n+1){ i=2; j=n; }else{ i=n; } } else{ if(j==n+1){ 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) { int[][] magic = Magic_Odd.magicOdd(11); //测试11阶幻方 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(); } }}
所谓幻方(最基本的那种),就是横,竖,对角线上的数的和等于一个常数的数字方阵
4 3 8
9 5 1
2 7 6
以上这个图,有什么规律?容易写成代码吗?我们把这个图,向右复制五次,向下复制三次,展开一下:
4 3 8 4 3 8 4 3 8 4 3 8 4 3 8
9 5 1 9 5 1 9 5 1 9 5 1 9 5 1
2 7 6 2 7 6 2 7 6 2 7 6 2 7 6
4 3 8 4 3 8 4 38 4 3 8 4 3 8
9 5 1 9 5 1 9 5 1 9 5 1 9 5 1
2 7 6 2 7 6 2 7 6 2 7 62 7 6
4 3 8 4 3 8 4 3 8 4 3 8 4 3 8
9 5 1 9 5 1 9 5 1 9 5 1 9 5 1
2 7 6 2 7 6 2 7 6 2 7 6 2 7 6
注意蓝色数字的走向。
怎么样,现在呢?现在看起来显得规律性强了很多,但是,你会不会觉得循环还是不太好写?我们如何从一个给定的n,直接得知它的坐标呢?不难,找一下规律就可以发现对于任意的数值n+1有(以左上角为0,0坐标):
x = 2 + n + n / 3;
y = 1 + n - n / 3;
其实这个规律可以简单扩展到任意奇数阶幻方(以下size是奇数):
x = size / 2 + 1 + n + n / size; (注意这里的除法是取整除法,不带小数)
y = size / 2 + n - n / size;
这样,我们就可以把原来复杂的循环,化简成一重简单循环。于是有程序:
阅读全文
1 0
- 奇数阶幻方
- 奇数阶幻方
- 奇数阶幻方
- 奇数阶幻方
- 奇数阶幻方
- 奇数阶幻方
- 奇数阶幻方
- 奇数阶幻方 nyoj734
- java:奇数阶幻方
- 奇数阶幻方求解
- Java提高 - 奇数阶幻方
- 奇数
- N(奇数)阶幻方解法
- Java奇数阶幻方实现代码
- 奇数阶幻方(幻方)
- 奇数阶幻方的经典方法-罗伯法
- 奇数阶幻方的经典方法-罗伯法
- N(奇数)阶幻方-java实现代码
- win10安装msi提示2502、2503错误代码的解决方法
- 了解elasticsearch 相关JVM
- JavaScript学习笔记6 面向对象之创建对象
- Hibernate写入时间时获取不了时分秒的解决方法
- MailBee.NET Objects发送电子邮件(SMTP)教程六:创建并发送带有附件的邮件
- 奇数阶幻方
- 使用KNN算法实现 0-9 十个数字的识别
- 5-16
- volatile关键字的理解
- Java别说取余(%)运算简单,你真的会吗?
- 分布式架构学习之:031--FastDFS 集群的安装、配置、使用
- vue-cli 打包压缩(npm run build)文件后,默认根目录修改
- 网页使用自定义字体
- 搜索