1-10 这十个数字  要求分成若干组,每组七个数字。每组内部的数字不能重复,组与组之间的七个数字不能完全相同。
大哥们能给些思路吗?初学,思路希望是基本些的。

解决方案 »

  1.   

      很明显这是一个组合问题,高中就学过.有递归就可以很容易做到,可我认为用递归不那么好理解.
    由于这道题的数目比较小,可以用这种方法.(数字太多就不好办了)
      10选7不好办,可以有10选3,然后将其余的7个放入数组.
      public void main(String arg[])
      {
      int a,b,c,counter=0;
      int array[1000][7],i,j;
      for(a=1;a<=10;a++)
          for(b=1;b<=10;b++)
            for(c=1;c<=10;c++)
            {
                   if(a>b&&b>c)
                   {
                         for(j=0,i=1;i<=10;i++)
                             if(i!=a&&i!=b&&i!=c)
                                 array[counter][j++]=i;
                         counter++;
                    }
             }
      counter--;
      while(counter)
      {
          for(i=0;i<7;i++)
              System.out.print(" "+array[counter]);
          System.out.println(" ");
          counter--;
       }
    }
      最外层的三个for循环将产生3的10次方个序列而只保留a>b>c这一种情况就能保证不重复.                         
                         
      

  2.   

    这是一个组合问题,也就是从 10 个数字当中选择 7 个,有多少种不同的选法。这样好理解些。根据数学公式 n!/[(n-m)!m!],应该有 10!/(3!7!) = 120 种。解决思路:
    以 4 选 2 为例,按照从小到大的顺序来选以避免重复。首先选 1,那么有 2,3,4 三种选法;首先选 2,那么有 3,4 两种。首先选 3,则只有一种,那么 4 选 2 总共可以列举出 6 种选法。
      

  3.   

    报歉,上面的输出语句有误.
    System.out.print(" "+array[counter]); 改为System.out.print(" "+array[counter][i]);