java实现 n阶幻方(奇偶通用)
来源:互联网 发布:手机声音剪辑软件 编辑:程序博客网 时间:2024/05/18 04:45
/*******测试代码,改变数字即可************/
public class MagicTest { public static void main(String[] args) { Magic m=new Magic(4); m.printMagic(); } }
/********n阶幻方(魔方)********/
public class Magic { private int n; private int[][] I; private int[][] J; public Magic(int n) { this.n = n; } public int[][] getMagic(){ int[][] M=null; if(n<=2)return M; if(n%2==1){ meshGrid(); M=new int[n][n]; for(int i=0;i<n;i++) for(int j=0;j<n;j++){ int a=mod(I[i][j]+J[i][j]-(n+3)/2,n); int b=mod(I[i][j]+2*J[i][j]-2,n); M[i][j]=n*a+b+1; } } else if(n%4==0){ meshGrid(); M=reshape(); for(int i=0;i<n;i++) for(int j=0;j<n;j++){ int a=(int)Math.floor(mod(I[i][j],4)/2.0); int b=(int)Math.floor(mod(J[i][j],4)/2.0); if(a==b){ M[i][j]=n*n+1-M[i][j]; } } } else{ int p=n/2; Magic magic=new Magic(p); int[][] temp=magic.getMagic(); M=new int[n][n]; for(int i=0;i<p;i++){ for(int j=0;j<p;j++){ M[i][j]=temp[i][j]; M[i][j+p]=temp[i][j]+2*p*p; M[i+p][j]=temp[i][j]+3*p*p; M[i+p][j+p]=temp[i][j]+p*p; } } int k=(n-2)/4; for(int j=0;j<k;j++){ for(int i=0;i<p;i++){ int t=M[i][j]; M[i][j]=M[i+p][j]; M[i+p][j]=t; } } for(int j=n-k+1;j<n;j++){ for(int i=0;i<p;i++){ int t=M[i][j]; M[i][j]=M[i+p][j]; M[i+p][j]=t; } } int t=M[k][0];M[k][0]=M[k+p][0];M[k+p][0]=t; t=M[k][k];M[k][k]=M[k+p][k];M[k+p][k]=t; } return M; } private void meshGrid(){ if(n>2){ I=new int[n][n]; J=new int[n][n]; for(int i=0;i<n;i++) for(int j=0;j<n;j++){ I[i][j]=i+1; J[i][j]=j+1; } } } private int[][] reshape(){ if(n>2){ int[][] M=new int[n][n]; for(int i=0;i<n;i++) for(int j=0;j<n;j++){ M[i][j]=i*n+j+1; } return M; } return null; } private int mod(int a,int n){ int m=a%n; if(m<0) m+=n; return m; } public void printMagic(){ this.getMagic(); int[][] a=this.getMagic(); for(int i=0;i<a.length;i++){ for(int j=0;j<a[i].length;j++){ System.out.print(a[i][j]+"\t"); } System.out.println(); } }}
0 0
- java实现 n阶幻方(奇偶通用)
- 奇偶排序java实现
- Java 实现奇偶排序
- 奇偶数分离Java实现
- Java实现-奇偶分割数组
- N(奇数)阶幻方-java实现代码
- n&1判断奇偶
- n&1判断奇偶
- n&1 判断奇偶
- n!的实现(java)
- N-Queen(java实现)
- ACM 奇偶数分离 (Java)
- 判断C(n,m) 奇偶
- 3n+1奇偶变换
- Android Edittext输入限制一位小数2位小数(n位)小数简单通用实现
- java实现文件下载(java均通用) --转载
- Java实现通用线程池
- Java实现通用线程池
- 2dx学习笔记-----类型转换(CCstring int string char UTF-8互转)
- jQuery
- 计算“两个整数的最大公约数”程序
- 2014项目二
- 【ObjC那点儿事儿】property和synthesize
- java实现 n阶幻方(奇偶通用)
- Linux进程 进程组 会话 控制终端概念
- Linq to XML Helper
- Undefined reference to 'WinMain@16
- Redis主从同步—笔记
- 两种新建线程的简单方法以及懒汉模式中lock的重要性
- iOS之优先使用autorelease
- Mongoose入门
- cannot set user id Resource temporarily unavailable