Java 平均计算中的近似因子
以下是我想做的: 我有一个大小为N的双[](N不会大于500,但此程序的不同应用程序将有不同的N)。我现在想知道我能用什么组合达到给定的平均值。例如: 我找的号码是3。双数组中只有2项{6,2} 程序应该循环并告诉我1x[0]和3x[1]=6+2+2+2/4=3是实现这一点的最简单方法。我还想将这些因素限制在最大值,比如10000(即,最大值可以是10000[0]+10000[1]) 我正在试验嵌套的while循环,但无法使其工作。请给我一个起跳器好吗 谢谢 编辑:这是我到目前为止的资料。它适用于两个给定的组合,但由于每个因子需要一个for循环,因此实现起来会非常复杂Java 平均计算中的近似因子,java,algorithm,math,weighted-average,Java,Algorithm,Math,Weighted Average,以下是我想做的: 我有一个大小为N的双[](N不会大于500,但此程序的不同应用程序将有不同的N)。我现在想知道我能用什么组合达到给定的平均值。例如: 我找的号码是3。双数组中只有2项{6,2} 程序应该循环并告诉我1x[0]和3x[1]=6+2+2+2/4=3是实现这一点的最简单方法。我还想将这些因素限制在最大值,比如10000(即,最大值可以是10000[0]+10000[1]) 我正在试验嵌套的while循环,但无法使其工作。请给我一个起跳器好吗 谢谢 编辑:这是我到目前为止的资料。它适用
public class Test {
public static void main(String[] args) {
double[] returns = {6,2};
double givenReturn = 3;
double maxStock = 5000;
double calcReturn = 0;
for (int a = 0; a < maxStock && (givenReturn != calcReturn); a++) {//first level
for (int b = 0; b < maxStock && (givenReturn != calcReturn); b++) {//second level
calcReturn = (a*returns[0]+b*returns[1])/(a+b);
if(calcReturn == givenReturn){
System.out.println(a+" "+b);
break;
}
}
}
}
}
公共类测试{
公共静态void main(字符串[]args){
double[]返回={6,2};
双给定返回=3;
双maxStock=5000;
双calcReturn=0;
对于(int a=0;a
程序成功打印:“13”
我怎样才能使程序与十个不同的返回数组一起工作?为了便于参考,您的问题从数学上讲:
Given an integer T and a vector c (|c| <= 500), solve for vector a and integer b:
(all numbers are non-negative integers)
a0.c0 + a1.c1 + a2.c2 + ... = T.b
a0 + a1 + a2 + ... = b
each ai <= 10000
b > 0
Additional constraint: minimize b
给定一个整数T和一个向量c(| c |不确定这是否是最有效的方法,但您可以查找1个数为3,或2个数的和为6,或3个数的和为9,…或N个数的和为3xN。在每种情况下,平均值为3。关于解决和问题,有几个问题,例如:谢谢,但是您链接的问题不完全是什么我一直在寻找。它朝着总体方向发展,但我的问题不是最小子集求和,而是最小子集平均值的计算。谢谢,我会研究一下。这是我需要的起点。我还将在一个大学高性能计算机系统上运行它,这样它应该能很快解决问题:)