动态规划-仓库问题-java与kotlin

仓库储物分配

有一个仓库,仓库里面可以放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 个格子")}

运行结果

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值