2

给你一个数组,有 8 杯水,每个杯子装的水量不同,你必须在所有杯子中得到等量的水,并且只能使用此功能

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

也许递归?有任何想法吗?

4

2 回答 2

12

似乎你可以在这里使用合并排序逻辑......

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

首先做equals(1,2),equals(3,4),equals(5,6),equals(7,8)。此时杯子 1 和 2 的数量相同,杯子 3 和 4 的数量相同,依此类推。

接下来执行equals(1,3)、equals(2,4)、equals(5,7)、equals(6,8)。现在杯子 1,2,3,4 的数量相同,杯子 5,6,7,8 的数量相同。

最后做等于(1,5),等于(2,6),等于(3,7),等于(4,8)。请注意,您也可以使用 equals(1,4)、equals(1,5) 等,因为 1,2,3,4 的数量相同。在这一步之后,所有杯子的数量都一样!

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

于 2012-11-24T22:11:23.617 回答
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);
于 2012-11-24T23:22:53.553 回答