一次只使用平均2个成员查找数组的平均值

时间:2012-11-24 22:06:20

标签: java c algorithm recursion average

给你一系列8杯水,每杯装满不同量的水 你必须在所有杯子中获得等量的水,并且只能使用这个功能

public void equals(double[] arr, int i, int j) {
    arr[i] = arr[j] = (arr[i] + arr[j]) / 2;
}

也许递归?有什么想法吗?

2 个答案:

答案 0 :(得分:12)

好像你可以在这里使用mergesort-esque逻辑......

如果你有杯子1,2,3,4,5,6,7,8 ......

首先做等于(1,2),等于(3,4),等于(5,6),等于(7,8)。杯子1& 2具有相同的数量,杯子3& 4具有相同的数量等等。

接下来做等于(1,3),等于(2,4),等于(5,7),等于(6,8)。现在杯子1,2,3,4具有相同的量,而杯子5,6,7,8具有相同的量。

最后做等于(1,5),等于(2,6),等于(3,7),等于(4,8)。注意,你也可以做等于(1,4),等于(1,5)等因为1,2,3,4都有相同的数量。完成此步骤后,所有杯子的数量都相同!

如果您需要帮助在java中编写代码,请询问。

答案 1 :(得分:2)

int qty=8;
for (int mask=1; mask<qty; mask+=mask)
   for (int k=0; k<qty/2; k++)
      equals(arr, k+(-mask&k), k+(-mask&k)+mask);