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

存在这样一个数组{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("------------------");
       }}}}}}}}}}}
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值