给你一系列8杯水,每杯装满不同量的水 你必须在所有杯子中获得等量的水,并且只能使用这个功能
public void equals(double[] arr, int i, int j) {
arr[i] = arr[j] = (arr[i] + arr[j]) / 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);