Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 平均计算中的近似因子_Java_Algorithm_Math_Weighted Average - Fatal编程技术网

Java 平均计算中的近似因子

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循环,但无法使其工作。请给我一个起跳器好吗 谢谢 编辑:这是我到目前为止的资料。它适用

以下是我想做的: 我有一个大小为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循环,因此实现起来会非常复杂

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。关于解决和问题,有几个问题,例如:谢谢,但是您链接的问题不完全是什么我一直在寻找。它朝着总体方向发展,但我的问题不是最小子集求和,而是最小子集平均值的计算。谢谢,我会研究一下。这是我需要的起点。我还将在一个大学高性能计算机系统上运行它,这样它应该能很快解决问题:)