各位高手,帮忙解决个问题好不?
随即7个数,每个数的范围在[0,35]
让这7个书加起来等于108
然后打印这7个数  

解决方案 »

  1.   

    这7个数可有相同的情况:
        public static void main(String[] args) {
         for(int n1 = 0; n1 < 36; n1++){
             for(int n2 = 0; n2 < 36; n2++){
                 for(int n3 = 0; n3 < 36; n3++){
                     for(int n4 = 0; n4 < 36; n4++){
                         for(int n5 = 0; n5 < 36; n5++){
                             for(int n6 = 0; n6 < 36; n6++){
                                 for(int n7 = 0; n7 < 36; n7++){
                                 if (n1+n2+n3+n4+n5+n6+n7 == 108){
                                 System.out.println(" "+n1+" "+n2+" "+n3+" "+n4+" "+n5+" "+n6+" "+n7);
                                 }
                                 }
                             }
                         }
                     }
                 }
             }
         }
        }
      

  2.   

    7个数不许重的情况:
        public static void main(String[] args) {
         for(int n1 = 0; n1 < 36; n1++){
             for(int n2 = 0; n2 < 36; n2++){
             if(n2  == n1){
             continue;
             }
                 for(int n3 = 0; n3 < 36; n3++){
                 if(n3  == n1 || n3  == n2){
                 continue;
                 }
                     for(int n4 = 0; n4 < 36; n4++){
                     if(n4  == n1 || n4  == n2 || n4  == n3){
                     continue;
                     }
                         for(int n5 = 0; n5 < 36; n5++){
                         if(n5  == n1 || n5  == n2 || n5  == n3 || n5  == n4){
                         continue;
                         }
                             for(int n6 = 0; n6 < 36; n6++){
                             if(n6  == n1 || n6  == n2 || n6  == n3 || n6  == n4 || n6  == n5){
                             continue;
                             }
                                 for(int n7 = 0; n7 < 36; n7++){
                                 if(n7  == n1 || n7  == n2 || n7  == n3 || n7  == n4 || n7  == n5 || n7  == n6){
                                 continue;
                                 }
                                 if (n1+n2+n3+n4+n5+n6+n7 == 108){
                                 System.out.println(" "+n1+" "+n2+" "+n3+" "+n4+" "+n5+" "+n6+" "+n7);
                                 }
                                 }
                             }
                         }
                     }
                 }
             }
         }
        }
      

  3.   

    int count = 108;
            int maxNum = 35;
            int result[] = new int[7];        for (int i = 0; i < 6; i++) {
                result[i] = (int) (Math.random() * (count > maxNum ? maxNum : count));
                count -= result[i];
            }
            result[6] = count;
            
            for (int i = 0; i < 7; i++) {
                System.out.println(result[i]);
            }
        }这样应该符合你的要求吧?
      

  4.   

    都是牛人啊。几分钟就搞这一个case.
      

  5.   

    awded(awded) 的方法并没有对最后生成的那个数进行大小判断。
    是否<35。还是不够完整
      

  6.   

    写个while的判断循环进去吧。。
      

  7.   

    在随机数中设置(int) Math.random()在[0,35]之间就是然后实现去掉重复的组合 result[]
      

  8.   

    收到!修改之        int count = 108;
            int maxNum = 35;
            int result[] = new int[7];
            while (true) {
                for (int i = 0; i < 6; i++) {
                    result[i] = (int) (Math.random() * (count > maxNum ? maxNum : count));
                    count -= result[i];
                }
                
                if (count <= 35) {
                    result[6] = count;
                    break;
                }
            
            for (int i = 0; i < 7; i++) {
                System.out.println(result[i]);
            }
        }
      

  9.   

    也不准确吧,你每次count<35的时候就break了,根本就没有取到7个数啊,不知道还有没有更好的方法呢,再次谢谢awded的解答!
      

  10.   

    int count = 108;
        int maxNum = 35;
        int result[] = new int[7];
        
        result[6]=108;
        while(result[6]>35)
        {
        for (int i = 0; i < 6; i++) 
        {
            result[i] = (int) (Math.random() * (count > maxNum ? maxNum : count));
            count -= result[i];
        }
        result[6] = count;
        }    
        for (int i = 0; i < 7; i++) 
        {
            System.out.println(result[i]);
        }
      

  11.   

    哦。不好意思。偶刚刚发的还是有问题。。和awded(awded)的一样继续关注
      

  12.   

    awded(awded)的修改一下;
    int count = 108;
            int maxNum = 35;
            int result[] = new int[7];
            while (true) {
                for (int i = 0; i < 6; i++) {
                    result[i] = (int) (Math.random() * (count > maxNum ? maxNum : count));
                    count -= result[i];
                }
                
                if (count <= 35) {
                    result[6] = count;
                    count=108;                        //修改的地方
                    break;
                }
            
            for (int i = 0; i < 7; i++) {
                System.out.println(result[i]);
            }
        }
      

  13.   

    fred_duxiao() 说得对;也不对,不对是因为剩下的数是等于0,题目是说随即7个数,每个数的范围在[0,35],不是说的是7个范围在(0,35]的数。如果是那样的话,我来改改
            int count = 102;
            int temp;
            int maxNum = 35;
            int result[] = new int[7];
            while (true) {
                for (int i = 0; i < 6; i++) {
                    result[i] = (int) (Math.random() * (count > maxNum ? maxNum : count));
                    count -= result[i]+i;
                    
                    temp = count/(i+1);
                    if( maxNum > temp)
                    {
                     maxNum = temp;
                     }
                }
                
                if (count <= 35) {
                    result[6] = count;
                    break;
                }
            
            for (int i = 0; i < 7; i++) {
                System.out.println(result[i]);
            }
        }
    这样应该可以了吧。
      

  14.   

    写错了一点儿,不是count -= result[i]+i;应该count -= result[i]+1;
      

  15.   

    dabuniu1846(猪头学长)真是猪头,count都快变成0了,你还要count=108;,这永远也不可能的撒
      

  16.   

    楼上的大哥。。如果符合break的条件
    count=108又有什么关系。最后还是得到了result[i]。。只是可能逻辑不是很好
    改成这样逻辑好一些
    int count = 108;
        int maxNum = 35;
        int result[] = new int[7];
        while (true) 
        {
            for (int i = 0; i < 6; i++) 
            {
                result[i] = (int) (Math.random() * (count > maxNum ? maxNum : count));
                count -= result[i];
            }
            
            if (count <= 35) 
            {
                result[6] = count;
                break;
            }
            count=108;
        }
        
        for (int i = 0; i < 7; i++) 
        {
            System.out.println(result[i]);
        }