您的位置:首页 > 职场人生

Java面试题--沙袋装箱问题

2015-11-06 18:08 791 查看
前言:

今天公司来了两个面试者,一个面试Android软件工程师,一个面试Java EE软件工程师。都是一会就说不做了,然后就走了,然后我就很好奇,是什么题目让大家如临大敌,这也让我对新来的主管产生了一点点的敬畏;

题目:

     对于这个题目感兴趣的可以一起探讨一下,这个题目还是比较有意思的,先给出题目,别人的解决方法,已经我自己的思路。



网上其他人的思路:

java沙袋装箱问题

ps:题目就是借用他的图片,嘻嘻......

我自己的思路:

先给代码:

package org.smt.util;

import java.util.ArrayList;
import java.util.Collections;

public class TextMain {

public static void main(String[] args) {
int[] nums = new int[] {50, 60, 70, 80, 40, 20, 28, 36, 27, 46, 55, 58};
ArrayList<Integer> bagList = new ArrayList<Integer>();
for (int i = 0; i < nums.length; i++) {
bagList.add(nums[i]);
}
Collections.sort(bagList);
ArrayList<ArrayList> train = new ArrayList<ArrayList>();
int tankSize = 100;
while (bagList.size() > 0) {
ArrayList<Integer> tank = new ArrayList<Integer>();

inTank(tank, bagList, tankSize);

train.add(tank);
}

for (ArrayList<Integer> tank : train) {
System.out.println("/////////////////");
for (Integer bag : tank) {
System.out.println(" " + bag);
}
}
}

public static void inTank(ArrayList tank, ArrayList bagList, int tankSize) {
int tmp_j = 0, tmp_k = 0;
Integer sum = 0, max = 0;
for (int j = 0; j < bagList.size() - 1; j++) {
for (int k = bagList.size() - 1; k > j; k--) {
sum = (Integer)bagList.get(j) + (Integer)bagList.get(k);
if (sum <= 100) {
if (max < sum) {
max = sum;
tmp_j = j;
tmp_k = k;
}
}
}

}
tank.add(bagList.get(tmp_j));
tank.add(bagList.get(tmp_k));
bagList.remove(tmp_j);
bagList.remove(tmp_k - 1);
}
}

运行结果:

/////////////////
20
80
/////////////////
40
60
/////////////////
28
70
/////////////////
46
50
/////////////////
36
58
/////////////////
27
55最后的结果都是6个箱子来装沙袋,但是我觉得这个过程是很有歧义的,就像上文的兄弟提到过的,有时间再继续分享。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: