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个箱子来装沙袋,但是我觉得这个过程是很有歧义的,就像上文的兄弟提到过的,有时间再继续分享。
今天公司来了两个面试者,一个面试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个箱子来装沙袋,但是我觉得这个过程是很有歧义的,就像上文的兄弟提到过的,有时间再继续分享。
相关文章推荐
- J2EE程序员需掌握的技术
- 技术面试那点事情儿
- 程序员常去的14个顶级开发社区
- 嵌入式软件工程师前期职业生涯规划
- 给程序员的五点建议--如何成为编程高手并以此创业
- 这些 iOS 面试基础题目,你都深入了解吗?
- 程序员的七宗罪,你犯错了吗
- 黑马程序员——OC基础---Foundation框架之结构体
- JAVA面试题(1年工作经验!)
- 黑马程序员------IO流体系图
- 黑马程序员--String类
- ——黑马程序员——OC中@property、@synthesize关键字
- 职业规划之方法论
- WinForm播放视频
- 前端面试常见问题。
- php程序员进阶篇 [十问PHP程序员]
- JVM程序员的阅读清单
- 黑马程序员------二维数组三种格式的内存图解
- 黑马程序员------50道JAVA基础编程练习题
- 程序员必须知道的几个Git代码托管平台