现有一个技术难题请教各位高手给你两个数,按8:4或4:8或6:6的比例进行组合(即左边的数+右边的数=12 为1局),请问怎样组合才能组合出最大的局数.
如:90:54这两个数,可以组合出(10个8:4,1个4:8,1个6:6共12局 或 9个8:4,3个6:6共12局).请不要用嵌套循环来解决.最好用一个公式之类的算出.

解决方案 »

  1.   

    syoumei(砸楼上的窗户,往楼下丢臭鸡蛋) 的解释很正确
      

  2.   

    8x + 4y + 6z = 90
    4x + 8y + 6z = 54可转换成求该方程的整数解,最大的局数就是x+y+z的最大值
      

  3.   

    x+y+z = (90+54)/12 = 12
      

  4.   


    csdn的高手有谁能解决这个问题给出任意两个数,按8:4或4:8或6:6进行拆分,每一个比例为1局,问怎样拆分才能拆分出最大局数.
    如:90:54这两个数,可以拆分出(9个8:4,3个6:6 最大共拆分出12局).
    再如:11:14 两个数,可以拆分出(1个4:8,1个6:6 最大共拆分出2局).
    再如:1:12 两数,最大局数为0局.
      

  5.   

    x = 4a + 6b + 8c;
    y = 8a + 6b + 4c;
    x + y = 12 (a + b + c)我们要求的就是a + b + c,问题是11:14,1:12什么意思
      

  6.   

    设这任意2个整数为a,和b即a:b. 并设其可以拆分为x个4:8,y个6:6,z个8:4.则可以得到:
          4x+6y+8z=a 
          8x+6y+4z=b;
    2式相加可以得到局数number :
          x+y+z=(a+b)/12         (你这个局数无所谓最大,如果存在解,则就已经定了)
    也把x看做定值,由上面方程组得到:
         y=(2b-a)/6-2x,z=(a-b)/4+x;
    这样你只要x从0循环到number就可以得到所有的解,而无须嵌套循环.代码如下:        //功能方法,判断一个浮点型数是否为正的整数(例如3.0是而3.2和-3.0都不是).
        public static boolean isZhengInteger(float f){
    int intf=(int)f;
    Integer intObjf=Integer.valueOf(intf);
    float temp=intObjf.floatValue();
    if(temp==f && temp>=0){
    return true;
    }
    return false;
    }
           
            //主要方法,最后结果保存在一个list里面,list里每一项形式为"xyz"形式,表示x个4:8,
            //y个6:6,z个8:4.list的大小表示共有多少种拆分方法.
            public static List<String> getResult(int a,int b){
    float number=(a+b)/12;
    if(!isZhengInteger(number)){
    return null;
    }
    if(a<4 || b<4){
    return null;
    }
    List<String> result=new ArrayList<String>();
    float y,z;
    for(int x=0;x<=number;x++){
    y=(float)(2*b-a)/6-2*x;
    z=(float)(a-b)/4+x;
    if(isZhengInteger(y) && isZhengInteger(z)){
    result.add(""+x+y+z);
    }
    }
    return result;
    }
      

  7.   

    设两数为m,n
    8:4 4:8 6:6分别为,a,b,c
    a8+b4+c6=m
    a4+b8+c6=n将上面的数值带入的话
    a-b=9的话就可以成立有一个小的条件是a<m/8=90/8=11 b<n/4=54/4=13
    用一个for循环的因该很快的
      

  8.   

    for(a<=m/8,b<n<4,a-b=9)
    {x=x+1}
    最后的x就是你求证的数字
      

  9.   

    非常感谢csdn的高手
    但是问题还是没有解决用iseeiconquer(smallear)的方法
    只能算出两个数的余数同时为0的情况(如:4和8 共1局,8和16共2局等)
    不能算出任意一边余数不为零的情况(如:4和9 共1局,4和10 共1局,9和17 共2局)