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

前言:

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值