java实现N个同样质量的蛋糕,分给M个小猫。
时间: 2024-09-14 10:04:59 浏览: 46
在Java中,如果你想要模拟这样一个场景,通常会使用数组或集合(如ArrayList)来代表蛋糕,使用另一个数据结构(如HashMap或List)来表示小猫及其已经获得的蛋糕数。你可以通过循环或迭代的方式来分配蛋糕。
这里是一个简单的示例:
```java
import java.util.ArrayList;
import java.util.HashMap;
class Cake {
int quality; // 蛋糕的质量
// 构造函数,初始化质量和默认状态为未分配
public Cake(int quality) {
this.quality = quality;
}
}
public class KittenCakes {
private ArrayList<Cake> cakes;
private HashMap<String, Integer> kittensAndCakes;
public KittenCakes(int numCakes, int numKittens) {
cakes = new ArrayList<>(numCakes);
for (int i = 0; i < numCakes; i++) {
cakes.add(new Cake(numCakes)); // 假设所有蛋糕质量相等
}
kittensAndCakes = new HashMap<>();
for (int i = 0; i < numKittens; i++) {
kittensAndCakes.put("Kitten" + i, 0); // 初始化每只小猫已有的蛋糕数
}
}
public void distributeCakes() {
for (Cake cake : cakes) {
String kittenName = getOldestUnfedKitten(); // 获取最需要的小猫
if (kittenName != null) { // 如果有未分配完的蛋糕和小猫
kittensAndCakes.get(kittenName)++;
cake.quality -= kittensAndCakes.get(kittenName); // 减去分配给小猫的蛋糕质量
if (cake.quality == 0) {
cakes.remove(cake); // 蛋糕全部分完就移除
}
} else {
break; // 没有更多的蛋糕可以分配,跳出循环
}
}
}
private String getOldestUnfedKitten() {
String oldestKitten = null;
int minCakesGiven = Integer.MAX_VALUE;
for (Map.Entry<String, Integer> entry : kittensAndCakes.entrySet()) {
int cakesReceived = entry.getValue();
if (cakesReceived < minCakesGiven && cakesReceived > 0) {
oldestKitten = entry.getKey();
minCakesGiven = cakesReceived;
}
}
return oldestKitten;
}
// 其他相关方法...
}
```
在这个例子中,`distributeCakes()`方法会尝试均匀地分配蛋糕给每个小猫,直到所有的蛋糕都被分完或每个小猫都已经收到相同数量的蛋糕。
阅读全文