zoukankan      html  css  js  c++  java
  • Java学习笔记——山西煤老板蛋疼的拉车问题

    小荷才露尖尖角,早有蜻蜓立上头

                  ——小池

    这个问题是这样描述的:

    山西煤老板有3000吨煤,要运到1000km公里外的地方卖。他选择使用火车来运煤,每辆火车行驶一公里将消耗一吨煤,且火车载货上限为1000吨。

    山西煤老板是个懂代码的家伙,你觉得它最多能拉多少煤过去?

    且不论懂代码的人为什么要选择这么蛋疼的方式拉煤。。算了,直接把它抽象成数学问题。

    山西煤老板的煤总量为amount,总里程为totalTrail,火车载重为load

    这类问题存在隐藏条件:

    1、假设每辆车都能装满货物,那么amount一定是load的整数倍。(因为这样可以最大化送达货物)

    2、载物工具一定是每走一步消耗一个物品。(因为系数为1最简单,但是其实这个系数是灵活的,而且并不麻烦。)

    这道题举的例子比较简单,心算也是无压力的,主要讲讲思路。

    3000t煤先用3辆车拉满,行至1000/3(km)处,三辆车一共损失了负载1000t煤,停车,把剩下的2000t煤装到2辆车里拉,再往前行驶1000/2(km),又损失了1000t煤。最后1车拉走这1000t煤。

    ∴amount = 1000-1000(1-1/2-1/3)=833.3t煤

    代码用递归来实现,解出两个出口:

    1、递归...最后一趟车了,拉完,结束

    2、递归...最后几辆车了,拉完,结束

     1 package cn.train;
     2 
     3 public class Train {
     4     public static void main(String[] args) {
     5         int huoWu = 3000;
     6         int load = 1000;
     7         double totaltrail = 1000;
     8         huoWu = calculate(huoWu, load, 0.0, totaltrail);
     9         System.out.println("剩余货物为" + huoWu);
    10     }
    11     public static int calculate (int huoWu,int load,double trail,double totaltrail){
    12         int quantity = huoWu/load;//计算车数
    13         //不到最后一车就拉完了
    14         if (totaltrail-trail < load/quantity) {
    15             huoWu -= quantity*(totaltrail-trail);
    16             return huoWu;
    17         }
    18         //最后一车了
    19         if (huoWu == load) {
    20             huoWu -= (int)(totaltrail - trail);
    21             return huoWu;
    22         }
    23         trail += load/quantity;//开始走了
    24         huoWu -= load;
    25         return calculate(huoWu, load, trail, totaltrail);
    26     }
    27 }
  • 相关阅读:
    数字图像处理(一)之灰度转换和卷积python实现
    ArcEngine+C# 森林资源仿真系统 核心代码
    Dijkstra和Floyd算法遍历图的核心
    python像操作文件一样操作内存的模块 StringIO
    python操作Redis方法速记
    python中时间处理标准库DateTime加强版库:pendulum
    utittest和pytest中mock的使用详细介绍
    《金字塔原理》 读书笔记
    python轻量级orm框架 peewee常用功能速查
    docker中安装的mysql无法远程连接问题解决
  • 原文地址:https://www.cnblogs.com/tomasman/p/6853185.html
Copyright © 2011-2022 走看看