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

来源:互联网 发布:淘宝上传图片的分辨率 编辑:程序博客网 时间:2024/04/28 00:32

前言:

今天公司来了两个面试者,一个面试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个箱子来装沙袋,但是我觉得这个过程是很有歧义的,就像上文的兄弟提到过的,有时间再继续分享。


0 0