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

              ——小池

这个问题是这样描述的:

山西煤老板有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、递归...最后几辆车了,拉完,结束

 package cn.train;

 public class Train {
public static void main(String[] args) {
int huoWu = ;
int load = ;
double totaltrail = ;
huoWu = calculate(huoWu, load, 0.0, totaltrail);
System.out.println("剩余货物为" + huoWu);
}
public static int calculate (int huoWu,int load,double trail,double totaltrail){
int quantity = huoWu/load;//计算车数
//不到最后一车就拉完了
if (totaltrail-trail < load/quantity) {
huoWu -= quantity*(totaltrail-trail);
return huoWu;
}
//最后一车了
if (huoWu == load) {
huoWu -= (int)(totaltrail - trail);
return huoWu;
}
trail += load/quantity;//开始走了
huoWu -= load;
return calculate(huoWu, load, trail, totaltrail);
}
}

Java学习笔记——山西煤老板蛋疼的拉车问题的更多相关文章

  1. 0037 Java学习笔记-多线程-同步代码块、同步方法、同步锁

    什么是同步 在上一篇0036 Java学习笔记-多线程-创建线程的三种方式示例代码中,实现Runnable创建多条线程,输出中的结果中会有错误,比如一张票卖了两次,有的票没卖的情况,因为线程对象被多条 ...

  2. 0035 Java学习笔记-注解

    什么是注解 注解可以看作类的第6大要素(成员变量.构造器.方法.代码块.内部类) 注解有点像修饰符,可以修饰一些程序要素:类.接口.变量.方法.局部变量等等 注解要和对应的配套工具(APT:Annot ...

  3. Java学习笔记(04)

    Java学习笔记(04) 如有不对或不足的地方,请给出建议,谢谢! 一.对象 面向对象的核心:找合适的对象做合适的事情 面向对象的编程思想:尽可能的用计算机语言来描述现实生活中的事物 面向对象:侧重于 ...

  4. 0032 Java学习笔记-类加载机制-初步

    JVM虚拟机 Java虚拟机有自己完善的硬件架构(处理器.堆栈.寄存器等)和指令系统 Java虚拟机是一种能运行Java bytecode的虚拟机 JVM并非专属于Java语言,只要生成的编译文件能匹 ...

  5. 0030 Java学习笔记-面向对象-垃圾回收、(强、软、弱、虚)引用

    垃圾回收特点 垃圾:程序运行过程中,会为对象.数组等分配内存,运行过程中或结束后,这些对象可能就没用了,没有变量再指向它们,这时候,它们就成了垃圾,等着垃圾回收程序的回收再利用 Java的垃圾回收机制 ...

  6. 0028 Java学习笔记-面向对象-Lambda表达式

    匿名内部类与Lambda表达式示例 下面代码来源于:0027 Java学习笔记-面向对象-(非静态.静态.局部.匿名)内部类 package testpack; public class Test1{ ...

  7. 0025 Java学习笔记-面向对象-final修饰符、不可变类

    final关键字可以用于何处 修饰类:该类不可被继承 修饰变量:该变量一经初始化就不能被重新赋值,即使该值跟初始化的值相同或者指向同一个对象,也不可以 类变量: 实例变量: 形参: 注意可以修饰形参 ...

  8. 《Java学习笔记(第8版)》学习指导

    <Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...

  9. Java学习笔记-多线程-创建线程的方式

    创建线程 创建线程的方式: 继承java.lang.Thread 实现java.lang.Runnable接口 所有的线程对象都是Thead及其子类的实例 每个线程完成一定的任务,其实就是一段顺序执行 ...

随机推荐

  1. [.NET] 一步步打造一个简单的 MVC 网站 - BooksStore(一)

    一步步打造一个简单的 MVC 网站 - BooksStore(一) 本系列的 GitHub地址:https://github.com/liqingwen2015/Wen.BooksStore 简介 主 ...

  2. bootstrap file input 官方文档翻译

    file Input官方文档 中文翻译 file input 特性 1.这个插件会把简单的html文件变成一个更好用的文件选择输入控件,通过一个html的文件输入框,能兼容那些不支持jquery或js ...

  3. [UWP]了解模板化控件(3):实现HeaderedContentControl

    1. 概述 来看看这段XMAL: <StackPanel Width="300"> <TextBox Header="TextBox" /&g ...

  4. Sublime Text前端开发环境配置

    Sublime Text是前端开发不可不说的编辑器,本文以Sublime Text 3为例讲解一下如何搭建前端的开发环境. 下载Sublime Text 3 下载地址 #==> Sublime ...

  5. Swift开发

    1. 模糊效果 iconImageView.image = UIImage(named: "1.png") //效果类实例 let blurEffect = UIBlurEffec ...

  6. Linux网络那点事

    跨平台系列汇总:http://www.cnblogs.com/dunitian/p/4822808.html#linux 之前的之前说过网络自连接的配置(CentOS服务器网络配置:http://ww ...

  7. Unix文件 I/O(不带缓冲区的)上

    简介 Unix系统大多数文件i/o只需要:open.read.write.lseek.close这几个函数.但是某些时候我们也需要fcntl.ioctl.sync等函数配合使用.这些函数都是不带缓冲区 ...

  8. .NET中数据访问方式(一):LINQ

    语言集成查询(Language-Integrated Query),简称LINQ,.NET中的LINQ体系如下图所示:   在编程语言层次,LINQ对于不同的数据源提供了相同的查询语法,方便了程序员操 ...

  9. mysql 主从同步 实现增量备份

    数据库复制 replication 的实现原理 1:主服务器凡运行语句,都产生一个二进制日志 binlog 2:从服务器不断读取主服务器的binlog 3:从主服务读取到的binlog,转换为自身可执 ...

  10. jenkins容器权限被被拒绝

    问题,我们从官网上面pull下jenkins后,如果直接运行容器的没问题 docker run -d -p 8080:8080 -v jenkins:latest 不过我们可能需要映射下容器内部的地址 ...