前言:
今天公司来了两个面试者,一个面试Android软件工程师,一个面试Java EE软件工程师。都是一会就说不做了,然后就走了,然后我就很好奇,是什么题目让大家如临大敌,这也让我对新来的主管产生了一点点的敬畏;
题目:
对于这个题目感兴趣的可以一起探讨一下,这个题目还是比较有意思的,先给出题目,别人的解决方法,已经我自己的思路。
网上其他人的思路:
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个箱子来装沙袋,但是我觉得这个过程是很有歧义的,就像上文的兄弟提到过的,有时间再继续分享。