您的位置:首页 > 其它

打印9!所有组合,并且计算行,列,对角之和为15的矩阵

2010-03-17 11:17 393 查看
存在这样一个数组{1,2,3,4,5,6,7,8,9}

打印出所有不同顺序的组合,并且行列,对角之和都为15的矩阵!



java程序代码:

package Test;
/**
* 排成三列,每行、每竖,对角之和都为15
* 先算9!所有组合,再判断是否三列,每行、每竖,对角之和都为15
* @author xyhan
*
*/

public class Test1 {
//判断是否三列,每行、每竖,对角之和都为15
public static boolean print(int s[]) {
if((s[0] + s[1] + s[2]) != 15) return false;
else
if((s[0] + s[3] + s[6]) != 15) return false;
else
if((s[6] + s[7] + s[8]) != 15) return false;
else
if((s[2] + s[5] + s[8]) != 15) return false;
else
if((s[1] + s[4] + s[7]) != 15) return false;
else
if((s[3] + s[4] + s[5]) != 15) return false;
else
if((s[0] + s[4] + s[8]) != 15) return false;
else
if((s[2] + s[4] + s[6]) != 15) return false;

return true;
}

public static int[] getNum(int tem[] , int[] s , int len ) {
int f[] =new int[len];
int sp = 0 ;
for(int i = 0 ; i < s.length ; i++) {
switch(tem.length) {
case 1:
if(s[i]!= tem[0]) f[sp++] = s[i]; break;
case 2:
if(s[i]!= tem[0] && s[i] != tem[1]) f[sp++] = s[i]; break;
case 3:
if(s[i]!= tem[0] && s[i] != tem[1] && s[i] != tem[2] ) f[sp++] = s[i]; break;
case 4:
if(s[i]!= tem[0] && s[i] != tem[1] && s[i] != tem[2] && s[i] != tem[3]) f[sp++] = s[i]; break;
case 5:
if(s[i]!= tem[0] && s[i] != tem[1] && s[i] != tem[2] && s[i] != tem[3] && s[i] != tem[4] ) f[sp++] = s[i]; break;
case 6:
if(s[i]!= tem[0] && s[i] != tem[1] && s[i] != tem[2] && s[i] != tem[3] && s[i] != tem[4] && s[i] != tem[5]) f[sp++] = s[i]; break;
case 7:
if(s[i]!= tem[0] && s[i] != tem[1] && s[i] != tem[2] && s[i] != tem[3] && s[i] != tem[4] && s[i] != tem[5] && s[i] != tem[6]) f[sp++] = s[i]; break;
case 8:
if(s[i]!= tem[0] && s[i] != tem[1] && s[i] != tem[2] && s[i] != tem[3] && s[i] != tem[4] && s[i] != tem[5] && s[i] != tem[6] && s[i] != tem[7] ) f[sp++] = s[i]; break;
case 9:
if(s[i]!= tem[0] && s[i] != tem[1] && s[i] != tem[2] && s[i] !=tem[3] && s[i] != tem[4] && s[i] != tem[5] && s[i] != tem[6] && s[i] != tem[7] && s[i] != tem[8]) f[sp++] = s[i]; break;
default: return f;
}
}
return f;
}

public static void main(String[] args) {
int s[] = {1,2,3,4,5,6,7,8,9} ;
int temp[];int t1,t2,t3,t4,t5,t6,t7,t8,t9;
for (int n1 = 0 ; n1 < 9; n1 ++) {
t1 = s[n1];
temp = new int[1] ;
temp[0] = t1;
int tem[] = getNum(temp,s,8);
for(int n2= 0 ; n2 < 8; n2++) {
t2 = tem[n2];
temp = new int[2] ;
temp[0]=t1;
temp[1]=t2;
int tem1[] = getNum(temp,s,7);
for(int n3 = 0 ; n3 < 7; n3++) {
t3 = tem1[n3];
temp = new int[3];
temp[0]=t1;
temp[1]=t2;
temp[2]=t3;
int tem2[] = getNum(temp,s,6);
for(int n4 = 0 ; n4 < 6; n4++) {
t4 = tem2[n4];
temp = new int[4];
temp[0]=t1;
temp[1]=t2;
temp[2]=t3;
temp[3]=t4;
int tem3[] = getNum(temp,s,5);
for(int n5 = 0 ; n5 < 5; n5++) {
t5 = tem3[n5];
temp = new int[5];
temp[0]=t1;
temp[1]=t2;
temp[2]=t3;
temp[3]=t4;
temp[4]=t5;
int tem4[] = getNum(temp,s,4);
for(int n6 = 0 ; n6 < 4; n6++) {
t6 = tem4[n6];
temp = new int[6];
temp[0]=t1;
temp[1]=t2;
temp[2]=t3;
temp[3]=t4;
temp[4]=t5;
temp[5]=t6;
int tem5[] = getNum(temp,s,3);
for(int n7 = 0 ; n7 < 3; n7++) {
t7 = tem5[n7];
temp = new int[7];
temp[0]=t1;
temp[1]=t2;
temp[2]=t3;
temp[3]=t4;
temp[4]=t5;
temp[5]=t6;
temp[6]=t7;
int tem6[] = getNum(temp,s,2);
for(int n8 = 0 ; n8 < 2; n8++) {
t8 = tem6[n8];
temp = new int[8];
temp[0]=t1;
temp[1]=t2;
temp[2]=t3;
temp[3]=t4;
temp[4]=t5;
temp[5]=t6;
temp[6]=t7;
temp[7]=t8;
int tem7[] = getNum(temp,s,1);
for(int n9 = 0 ; n9 < 1; n9++) {
t9 = tem7[n9];
temp = new int[9];
temp[0]=t1;
temp[1]=t2;
temp[2]=t3;
temp[3]=t4;
temp[4]=t5;
temp[5]=t6;
temp[6]=t7;
temp[7]=t8;
temp[8]=t9;

System.out.println( t1 + t2 + t3 + t4 +t5 +t6+t7+t8+t9);打印所有组合
if(print(temp)) {
System.out.println(" " + t1 + " " + t2 + " " + t3 );
System.out.println(" " + t4 + " " + t5 + " " + t6 );
System.out.println(" " + t7 + " " + t8 + " " + t9 );
System.out.println("------------------");
}}}}}}}}}}}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐