Java九宫 最近老师布置了一个思考题,要我们设计一个九宫格。思考良久,未果。望哪位仁兄能帮小弟解答一下。有源代码最佳 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 class aa { public aa() { } public static void main(String[] args) { aa nine15 = new aa(); nine15.makeMatrix(); } private boolean test(int[][] m){ int sums[] = {0,0,0}; boolean finishes[] = {true, true, true}; for(int j=0; j<3; j++){ int sum = 0; boolean finished = true; for(int i=0; i<3; i++){ sum+= m[j][i]; sums[i] += m[j][i]; if(m[j][i]==0){ finished = false; finishes[i] = false; } } if(sum>15){ return false; } if(finished&&sum!=15){ return false; } } if(sums[0]>15||sums[1]>15||sums[2]>15){ return false; } if(finishes[0]&&sums[0]<15){ return false; } if(finishes[1]&&sums[1]<15){ return false; } if(finishes[2]&&sums[2]<15){ return false; } int s1 = m[0][0]+m[1][1]+m[2][2]; if(s1>15){ return false; } if(m[0][0]>0&&m[1][1]>0&&m[2][2]>0&&s1<15){ return false; } int s2 = m[0][2]+m[1][1]+m[2][0]; if(s2>15){ return false; } if(m[0][2]>0&&m[1][1]>0&&m[2][0]>0&&s2<15){ return false; } return true; } private void print(int[][] m){ for(int j=0; j<3; j++){ for(int i=0; i<3; i++){ System.out.print("\t"+m[j][i]); } System.out.println(); } } private void makeMatrix() { int m[][] = new int[3][3]; int p=0; int v=9; int pv[] = new int[10]; while(v>0){ if(p==9){ ++v; if(v==10){ break; } p=pv[v]; int rr = p/3; int cc = p%3; m[rr][cc] = 0; pv[v] = 0; p++; continue; } int r = p/3; int c = p%3; if(m[r][c]>0){ p++; continue; } m[r][c] = v; if(test(m)){ if(v>1){ pv[v] = p; v--; p = 0; }else{ System.out.println("======="); print(m); m[r][c] = 0; p++; } }else{ m[r][c] = 0; p++; } } }} http://youzi530.blog.163.com/blog/幻方阵!?分 public class TestNine{ public static void main(String[] args){ int n=9; if(n%2==0){ System.out.println("Error!"); System.exit(0); } int[][] data=new int[n][n]; int row=0,col=n/2; for(int i=1;i<=n*n;i++){ data[row][col]=i; row--; col++; if (row==-1 && col<n){ row=n-1; } if (row>=0 && col==n){ col=0; } if ( (row==-1 && col==n) || data[row][col]!=0) { row+=2; col--; } /* if (data[row][col]!=0){ row+=2; col--; } */ } for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ System.out.print(data[i][j]+" "); } System.out.println(); } }} 我编的记事本中无法添加滚动条 高手,我要救助呀 刚学JAVA,用JAVA改写TXT文本内容 什么是负载均衡? 今天的面试题 关于泛型的的转变问题 一个关于JXL设置EXCEL边框的问题 菜鸟的问题:关于I/O流,多多帮忙! 编译出错 web项目 eclipse的log问题 关于getContainerPane方法理解
public aa() {
} public static void main(String[] args) {
aa nine15 = new aa();
nine15.makeMatrix();
}
private boolean test(int[][] m){
int sums[] = {0,0,0};
boolean finishes[] = {true, true, true};
for(int j=0; j<3; j++){
int sum = 0;
boolean finished = true;
for(int i=0; i<3; i++){
sum+= m[j][i];
sums[i] += m[j][i];
if(m[j][i]==0){
finished = false;
finishes[i] = false;
}
}
if(sum>15){
return false;
}
if(finished&&sum!=15){
return false;
}
}
if(sums[0]>15||sums[1]>15||sums[2]>15){
return false;
}
if(finishes[0]&&sums[0]<15){
return false;
}
if(finishes[1]&&sums[1]<15){
return false;
}
if(finishes[2]&&sums[2]<15){
return false;
}
int s1 = m[0][0]+m[1][1]+m[2][2];
if(s1>15){
return false;
}
if(m[0][0]>0&&m[1][1]>0&&m[2][2]>0&&s1<15){
return false;
}
int s2 = m[0][2]+m[1][1]+m[2][0];
if(s2>15){
return false;
}
if(m[0][2]>0&&m[1][1]>0&&m[2][0]>0&&s2<15){
return false;
}
return true;
} private void print(int[][] m){
for(int j=0; j<3; j++){
for(int i=0; i<3; i++){
System.out.print("\t"+m[j][i]);
}
System.out.println();
}
} private void makeMatrix() {
int m[][] = new int[3][3];
int p=0;
int v=9;
int pv[] = new int[10];
while(v>0){
if(p==9){
++v;
if(v==10){
break;
}
p=pv[v];
int rr = p/3;
int cc = p%3;
m[rr][cc] = 0;
pv[v] = 0;
p++;
continue;
}
int r = p/3;
int c = p%3;
if(m[r][c]>0){
p++;
continue;
}
m[r][c] = v;
if(test(m)){
if(v>1){
pv[v] = p;
v--;
p = 0;
}else{
System.out.println("=======");
print(m);
m[r][c] = 0;
p++;
}
}else{
m[r][c] = 0;
p++;
}
}
}
}
幻方阵!?
分
public static void main(String[] args){
int n=9;
if(n%2==0){
System.out.println("Error!");
System.exit(0);
}
int[][] data=new int[n][n];
int row=0,col=n/2;
for(int i=1;i<=n*n;i++){
data[row][col]=i;
row--;
col++;
if (row==-1 && col<n){
row=n-1;
}
if (row>=0 && col==n){
col=0;
}
if ( (row==-1 && col==n) || data[row][col]!=0) {
row+=2;
col--;
}
/*
if (data[row][col]!=0){
row+=2;
col--;
}
*/
}
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
System.out.print(data[i][j]+" ");
}
System.out.println();
}
}
}