现有一个技术难题请教各位高手给你两个数,按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局).请不要用嵌套循环来解决.最好用一个公式之类的算出.
如:90:54这两个数,可以组合出(10个8:4,1个4:8,1个6:6共12局 或 9个8:4,3个6:6共12局).请不要用嵌套循环来解决.最好用一个公式之类的算出.
4x + 8y + 6z = 54可转换成求该方程的整数解,最大的局数就是x+y+z的最大值
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局.
y = 8a + 6b + 4c;
x + y = 12 (a + b + c)我们要求的就是a + b + c,问题是11:14,1:12什么意思
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;
}
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循环的因该很快的
{x=x+1}
最后的x就是你求证的数字
但是问题还是没有解决用iseeiconquer(smallear)的方法
只能算出两个数的余数同时为0的情况(如:4和8 共1局,8和16共2局等)
不能算出任意一边余数不为零的情况(如:4和9 共1局,4和10 共1局,9和17 共2局)