时间还可以不是整数 ,疏忽了 ,改了下提示:结果是 19.6
import org.apache.commons.math3.fraction.Fraction;
public class WaterPool {
public static void main(String[] args) {
Fraction capacity = new Fraction(1, 1);
Fraction current = Fraction.ZERO;
// 甲、乙、丙的流量分别是 1/5 、1/6 、-1/4
Fraction[] flows = {
new Fraction(1, 5),
new Fraction(1, 6),
new Fraction(-1, 4)
};
int completeHours = 0;
while (current.compareTo(capacity) < 0) {
int index = completeHours % 3;
Fraction rate = flows[index];
// 计算当前水管需要多少时间才能刚好注满
if (rate.compareTo(Fraction.ZERO) > 0) { // 进水管
Fraction timeToFill = capacity.subtract(current).divide(rate);
// 如果需要的时间不超过 1 小时,那么就找到精确时间了
if (timeToFill.compareTo(
Fraction.ONE) <= 0) {
System.out.println("最终结果: " + (completeHours + timeToFill.doubleValue()) + " 小时");
return;
}
}
// 否则,完成一个完整小时
current = current.add(rate);
completeHours++;
// 如果水量变为负,重置为 0
if (current.compareTo(Fraction.ZERO) < 0) {
current = Fraction.ZERO;
}
}
System.out.println("需要整数小时数: " + completeHours + " 小时");
}
}