p1223 排队接水java
时间: 2025-05-16 22:43:53 浏览: 15
### 关于 Java 实现排队接水问题
以下是基于提供的参考资料和常见算法设计的一个完整的 Java 解决方案,用于模拟多人排队接水的过程。
#### 代码实现
```java
public class WaterFilling {
public static void main(String[] args) {
int n = 10; // 总人数
int m = 4; // 水龙头数量
int[] times = {5, 8, 2, 3, 9, 7, 6, 4, 1, 10}; // 每个人接水所需时间
int[] result = calculateWateringTime(n, m, times);
System.out.println("每个人完成接水的时间:");
for (int time : result) {
System.out.print(time + " ");
}
}
/**
* 计算每个人的接水完成时间
*
* @param n 总人数
* @param m 水龙头数量
* @param times 每个人接水所需时间
* @return 完成接水的时间数组
*/
public static int[] calculateWateringTime(int n, int m, int[] times) {
int[] waterTaps = new int[m]; // 表示每个水龙头当前的占用时间
for (int i = 0; i < n; i++) {
int minIndex = findMinIndex(waterTaps); // 找到最早可用的水龙头
waterTaps[minIndex] += times[i]; // 更新该水龙头的占用时间
}
return waterTaps;
}
/**
* 查找数组中的最小值索引
*
* @param array 输入数组
* @return 最小值索引
*/
private static int findMinIndex(int[] array) {
int minIndex = 0;
for (int i = 1; i < array.length; i++) {
if (array[i] < array[minIndex]) {
minIndex = i;
}
}
return minIndex;
}
}
```
#### 说明
上述代码实现了多线程接水场景下的最优分配策略。核心逻辑在于通过 `findMinIndex` 方法动态查找当前可利用的最快释放的水龙头,并将其分配给等待的人群[^3]。最终返回的结果是一个长度为 `m` 的数组,代表每个水龙头最后一次被使用的时间点。
---
###
阅读全文
相关推荐












