有一组数A(一定大于3 有小数) 比如 3,5,30,50
另一组数B(一定大于0 有小数) 比如 1,2,3.5,4,10,20,30A每次取一个数 B每次可以取多个
现在要求取最优组合 结果小于等于0.3或者大于等于2
每个数字只能使用一次比方
A[0]-B[0]-B[1]=0 小于0.3 则为正确组合
A[1]-B[2]=1.5 则为错误组合
A B都允许有剩余未使用的数字 比如消耗完A 剩余B 或者消耗完B 剩余A
要求组合尽可能满足条件(小于等于0.3或者大于等于2)
另一组数B(一定大于0 有小数) 比如 1,2,3.5,4,10,20,30A每次取一个数 B每次可以取多个
现在要求取最优组合 结果小于等于0.3或者大于等于2
每个数字只能使用一次比方
A[0]-B[0]-B[1]=0 小于0.3 则为正确组合
A[1]-B[2]=1.5 则为错误组合
A B都允许有剩余未使用的数字 比如消耗完A 剩余B 或者消耗完B 剩余A
要求组合尽可能满足条件(小于等于0.3或者大于等于2)
解决方案 »
- 如何用博客调用另一个网站首页
- java和sql問題
- 请问哪里有买《Expert One-On-One J2Ee Design and Development》这本书?
- 头疼的hbm.xml配置
- Web Services如何传输Hibernate中的集合类型?
- Websphere5.0的问题
- web.xml文件为什么在编译后大部分文件会自动删除.
- 关于数据库乱码问题
- 请问一下:java和.net在开发和使用过程当中会发生一些冲突吗?
- 请问J2ee和ActiveX能否一起使用
- 使用Common dbutils时,出错了,希望大家帮忙解决一下
- Flex中如何通过firstDayOfWeek属性设置DateField控件的弹出窗口是否为星期天?
重新写下
有一组数A(一定大于3 有小数) 比如 3,5,30,50
另一组数B(一定大于0 有小数) 比如 1,2,3.5,4,10,20,30A每次取一个数 B每次可以取多个
现在要求取最优组合 结果 大于0小于等于0.3 或者 大于等于2(结果>0&&结果<=0.3 || 结果>=2)
每个数字只能使用一次比方
A[0]-B[0]-B[1]=0 小于0.3 则为正确组合
A[1]-B[2]=1.5 则为错误组合A B都允许有剩余未使用的数字
要求组合尽可能满足条件
求最优组合
import java.util.Arrays;
public class Test {
public static void main(String[] args) {
double[] a = { 3, 5, 30, 50 };
double[] b = { 1, 2, 3.5, 4, 10, 20, 30 };
Arrays.sort(a);
Arrays.sort(b);
int arrIndex = 0;
while (true && arrIndex < a.length) {
double getA = a[arrIndex];
int posIndex = 0;
for (int i = b.length - 1; i >= 0; i--) {
if (getA > b[i]) {
posIndex = i;
break;
}
}
double sum = 0d;
double result = 0d;
for (int j = 0; j < posIndex; j++) {
sum += b[j];
result = getA - sum;
if (sum != 0 && (result > 0 && result < 0.3) || result >= 2) {
double[] arrB = Arrays.copyOfRange(b, 0, j+1);
System.out.println("A:" + getA + " " + "B:"
+ Arrays.toString(arrB));
}
}
arrIndex++;
}
}
}
import java.util.Arrays;
public class Test {
public static void main(String[] args) {
double[] a = { 3, 5, 30, 50 };
double[] b = { 1, 2, 3.5, 4, 10, 20, 30 };
Arrays.sort(a);
Arrays.sort(b);
int arrIndex = 0;
while (true && arrIndex < a.length) {
double getA = a[arrIndex];
int posIndex = 0;
for (int i = b.length - 1; i >= 0; i--) {
if (getA > b[i]) {
posIndex = i;
break;
}
}
double sum = 0d;
double result = 0d;
for (int j = 0; j < posIndex; j++) {
sum += b[j];
result = getA - sum;
if (sum != 0 && (result > 0 && result <=0.3) || result >= 2) {
double[] arrB = Arrays.copyOfRange(b, 0, j+1);
System.out.println("A:" + getA + " " + "B:"
+ Arrays.toString(arrB));
}
}
arrIndex++;
}
}
}