package demo4;public class Zuiyouzhuangzai { static int[] boxes = {4, 10, 7, 11, 3, 5, 14, 2}; static int max = 0; static int cur = 0; public static void main(String[] args) { load(0, 0); System.out.println("最多能装入的集装箱数量为:" + max); } public static void load(int count, int weight) { if (weight > 30 || count == 8) { max = Math.max(max, count); return; } for (int i = 0; i < 8; i++) { if (boxes[i] > 0) { int temp = boxes[i]; boxes[i] = 0; load(count + 1, weight + temp); boxes[i] = temp; } } }}这段代码也有严重问题,请立马修改并说明原因
时间: 2024-02-14 14:10:40 浏览: 55
这段代码的问题在于,没有记录已经装载的集装箱,而是在递归调用load方法时,直接将boxes数组中对应的集装箱重量设置为0,然后再将其还原,这样会导致重复装载同一个集装箱的情况,从而影响结果的准确性。
修改后的代码如下:
```
package demo4;
public class Zuiyouzhuangzai {
static int[] boxes = {4, 10, 7, 11, 3, 5, 14, 2};
static int max = 0;
static int cur = 0;
public static void main(String[] args) {
load(0, 0, new int[8]);
System.out.println("最多能装入的集装箱数量为:" + max);
}
public static void load(int count, int weight, int[] loaded) {
if (weight > 30 || count == 8) {
max = Math.max(max, count);
return;
}
for (int i = 0; i < 8; i++) {
if (boxes[i] > 0 && loaded[i] == 0) {
int temp = boxes[i];
boxes[i] = 0;
loaded[i] = 1;
load(count + 1, weight + temp, loaded);
boxes[i] = temp;
loaded[i] = 0;
}
}
}
}
```
修改后的代码中,新增了一个loaded数组,用于记录已经装载的集装箱;在递归调用load方法时,只有集装箱重量大于0且没有被装载过时才进行装载,并将相应的loaded数组元素设置为1;在恢复集装箱重量和loaded数组时,将相应的loaded数组元素设置为0,以保证能够正常装载其他集装箱。这样就避免了重复装载同一个集装箱的情况,从而保证了结果的准确性。
阅读全文