昨天偶尔看到一个题目,有8个盘子排成一排,有3个苹果,要将这三个苹果放入盘子中,问有多少中排法,左边连续排三个和右边连续排三个为不同的排法,用程序实现。

解决方案 »

  1.   

     int i;
      int j;
       int k;
       int count;
    for(i=1;i<8;i++){
        for(j=1;j<8;j++){
          for(k=1;k<8;k++)
           {
             if(i!=k&&i!=j&&k!=j){
               count++;
            }
           }
         }
        }
      

  2.   


    int count = 0;
    for(int u=0;u<8;u++){
    for(int v=u+1;v<8;v++){
    for(int w=v+1;w<8;w++){
    count++;
    }
    }
    }
      

  3.   

    int count = 0;
    for(int u=0;u<8;u++){
        for(int v=u+1;v<8 - 1;v++){
            for(int w=v+1;w<8 - 2;w++){
                count++;
            }
        }
    }
    lz不是说一个盘子里只能放一个苹果么?
      

  4.   

    我这没重复放,u=8的时候,v就要从9开始算,直接不满足条件跳出
    u=7的时候,v=8,w也要从9开始算,也是不满足条件跳出
    v=u+1,w=v+1,这2句就决定了u,v,w不可能相等,苹果放不到一个盘子里
      

  5.   

    int count = 0;
    for(int u=0;u<8;u++){
    for(int v=u+1;v<8;v++){
    for(int w=v+1;w<8;w++){
    count++;
    }
    }
    }
    count = count/2;
      

  6.   


    public class Handle {

    private static int flag = 0;

    public static void main(String[] args){
    new Handle().addXYZ(1, 2, 3, 12);
    System.out.println(flag);
    }

    /**
     * 将第三个数从一加到N
     * @param x
     * @param y
     * @param z
     * @param n
     */
    private void addZ(int x,int y,int z,int n){
    for(;z<=n;z++){
    System.out.println(x+" "+y+" "+z);
    flag++;
    }
    }

    /**
     * 将第二个数加一,一直加到N-1。第三个数为第二个数加1,加到N
     * @param x
     * @param y
     * @param z
     * @param n
     */
    private void addXY(int x,int y,int z,int n){
    for(;y<=n-1;y++){
    addZ(x,y,y+1,n);
    }
    }

    /**
     * 将第三个数加一,一直加到N-2,第二个数为第一个数加一,一直加到N-1,第三个数为第二个数加一,一直加到N
     * @param x
     * @param y
     * @param z
     * @param n
     */
    private void addXYZ(int x,int y,int z,int n){
    for(;x<=n-2;x++){
    addXY(x,x+1,x+2,n);
    }
    }
    }这是我写的,各位可以做个参考
      

  7.   

    你的思维很有问题,不理解的话,自己手动测试下,把int 参数改为5,可以直接看出有没有重复
    实践出真知的