java 奇数阶幻方全解(连续摆数法)
来源:互联网 发布:佛教源码 编辑:程序博客网 时间:2024/05/20 17:10
package practice;
public class magic_2 {
public static int[][] creat(int i, int j,int n,int number,int number1,int mat[][]) { for (int k = 1; k <= n * n; k++) { mat[i][j] = k; if (k % n == 0) //对角线已满的时候可以上下左右4种情况 switch (number) { case 0:i = (i + 1) % n;break; //下一行 case 1:i = (i - 1 + n) % n;break; //上一行 case 2:j = (j - 1 + n) % n;break; //左一列 case 3:j = (j + 1) % n;break; //右一列 default: break; } else { //下一位置有可能出现的情况 switch (number1) { case 0: //右上方 i = (i - 1 + n) % n; j = (j + 1) % n; break; case 1: //右下方 i = (i + 1) % n; j = (j + 1) % n; break; case 2: //左上方 i = (i - 1 + n) % n; j = (j - 1 + n) % n; break; case 3: //左下方 i =(i + 1) % n; j = (j - 1 + n) % n; break; default: break; } } //如果出现错误直接返回null。 if (i<0||i>=n) { return null; } } return mat;
}
public static boolean test(int n,int mat[][]){ boolean bool =true; //新建a,b,c数组分别用来保存 mat数组的每一行,每一列和两个对角线之和 int a[]=new int[mat.length]; int b[]=new int[mat.length]; int c[]=new int[2]; for(int i=0;i<mat.length;i++){ //计算行,列,对角线的和 for(int j=0;j<mat[i].length;j++){ a[i]+=mat[i][j]; b[i]+=mat[j][i]; } c[0]+=mat[i][i]; c[1]+=mat[i][mat.length-1-i]; } for(int i=0;i<mat.length;i++){ //判断其和是否满足,不满足则bool=false if(a[i]!=(1+mat.length*mat.length)/2*mat.length|| b[i]!=(1+mat.length*mat.length)/2*mat.length|| c[0]!=(1+mat.length*mat.length)/2*mat.length|| c[1]!=(1+mat.length*mat.length)/2*mat.length) bool=false; } return bool;
}
public static void print(int k,int mat[][]){ System.out.println("第"+k+"种情况:"); for(int i=0;i<mat.length;i++){ for(int j=0;j<mat[i].length;j++) System.out.print(mat[i][j]+" "); System.out.println(); } }public static void main(String arg[]) { int n=3,k=1; //代表幻方阶数,k用来计数输出的个数 int number = 0; //对角线已满的时候可以上下左右4种情况 int number1 = 0; //下一位置有可能出现的情况 int mat[][] = new int[n][n]; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { for (number = 0; number <= 3; number++) { for (number1 = 0; number1 <=3; number1++) { mat = creat(i,j,n,number,number1,mat); if (test(n,mat)){ print(k,mat); k++; } } } } }}
}
阅读全文
0 0
- java 奇数阶幻方全解(连续摆数法)
- 连续奇数和(蓝桥杯)
- n^3 连续奇数和 java
- 蓝桥杯java第四届决赛第二题--连续奇数和
- HDU1998奇数阶魔方(连续摆数法(也称暹罗法)构造)
- 连续奇数和
- 连续奇数和
- 连续奇数和
- 2573: 连续奇数和
- 连续奇数和
- 【蓝桥杯】连续奇数和
- OJ刷题---连续奇数和
- YTU 2573: 连续奇数和
- 历届试题 连续奇数和
- YTU.2573: 连续奇数和
- N(奇数)阶幻方-java实现代码
- hdoj2006(java)求奇数的乘积
- ytu2573——连续奇数和
- ACM-ICPC 2017南宁赛区网络赛题目题解收集
- leetcode 1. Two Sum (C语言)12
- Python脚本进行用户信用评分体系计算的案例
- input标签禁止输入隐藏光标
- 类似百度文库的在线浏览功能
- java 奇数阶幻方全解(连续摆数法)
- C/C++消除字符串中的无效字符,用于加载配置
- 第三周第一节(第二章——线性表1)
- intel realsense usb枚举,读写数据解析
- git 403 总结
- JS(6)
- 日常笔记之md5sum用法
- 斐波纳契数列
- Shiro基本知识