仓库储物分配
有一个仓库,仓库里面可以放10个物品(将来可以扩展可以放N个物品),每个物品的重量分别如下(要考虑重量可能是其它100以内的任意数值):
- 物品1 重量是 51 公斤
- 物品2 重量是 80 公斤
- 物品3 重量是 1 公斤
- 物品4 重量是 28 公斤
- 物品5 重量是 55 公斤
- 物品6 重量是 1 公斤
- 物品7 重量是 75 公斤
- 物品8 重量是 2 公斤
- 物品9 重量是 1 公斤
- 物品10 重量是 89 公斤
请编写程序完成下面的要求:
每个储物格可以存储格可以承重100公斤,请问,最少需要几个储物格,每个储物格存储哪些编号的商品(为了简化,本题目不考虑体积,但是要考虑重量可能是其它100以内的任意数值),才能存储下这些物品。
解题思路
weight数组用来存放货物,将十个货物存放在weight中。
ge数组初始元素值为0,用来进行计算储物柜已存放的重量。
将weight数组的第一个元素,与ge数组的第一个元素相加,判断是否大于100,如果没有,则将结果赋值给ge,输出当前物品的存放位置,并将ge继续与下一个weight元素进行相加。直到结果大于100,跳出循环。进入if判断,是否需要另外的储物柜。
java解法
public static void main(String[] args) {
// TODO Auto-generated method stub
int []weight= {0,51,80,1,28,55,1,75,2,1,89};
int []ge=new int[11];
int i=1;
int j=0;
while(i<weight.length) {
j=1;
while(ge[j]!=1) {
if(ge[j]+weight[i]<=100) {
ge[j]+=weight[i];
System.out.println("物品"+i+"存放在储物格"+j);
break;
}
j+=1;
}
if(ge[j]==0) {
ge[j]=weight[i];
System.out.println("物品"+i+"存放在储物格"+j);
}
i+=1;
}
System.out.println("需要"+j+"个格子");
}
kotlin解法
fun main(){
var weight:IntArray = intArrayOf(0,51,80,1,28,55,1,75,2,1,89)
var ge = IntArray(weight.size+1)
ge[0] = weight[0]
var i:Int = 1
var j:Int = 0
while (i<weight.size){
j=1
while(ge[j]!=1){
if(ge[j] + weight[i] <= 100){
ge[j] += weight[i]
println("物品 $i 存放在储物格 $j")
break
}
j+=1
}
if(ge[j]==0){
ge[j] = weight[i]
println("物品 $i 存放在储物格 $j")
}
i+=1
}
println("需要 $j 个格子")}