!!!!先看解析,后面附有代码!!!!!!! ,希望大家不懂的能认真看看,这些都是我在写的过程中不能理解,遇到的困难,然后弄懂之后总结出来给大家的,想学的一定要认真看完。

规律是:

贮油点之间相差500升,

从最后一站倒推回来的每次往返次数规律是:1、3、 5、 7 、9、 、、、、、

/*
    第一站距离终点:500/1                    贮油点500升 
    第二站距离终点:500 + 500/3                   500*2
    第三站        : 500 + 500/3 + 500/5           500*3
    ...
    ...
    ...
    */

题目:
一辆重型卡车欲穿过
1000
公里的沙漠,卡车耗汽油为
1

/
公里,卡车总载油能力为
500
公升。显然卡车装一次油是过不了沙漠的。因此司机必须设法在沿途建立若干个贮油点,使卡车能顺利穿过沙漠。试问司机如怎样建立这些贮油点?每一贮油点应存储多少汽油,才能使卡车以消耗最少汽油的代价通过沙漠?
 
 
 
刚开始我也不理解这个题目,明白之后其实这个程序一点都不难
题目说的是,刚开始在起点有很多油,这些油都是用来供你过沙漠的,但是多少油也要你算出来,经过一段距离就建立贮油点,放下一些油,往起点跑回去,(每两个贮油点之间往返跑的次数是不一样的)然后装满500升之后又跑回那个新建的贮油点。
 
PS:还有一个点需要知道,就是题目问的是最省油,所以每次距离下一个贮油点都要给500升给司机的车途中耗油。所以这个可以得知每个贮油点之间相差500升,注意不是相差500Km,因为你要往返运动。
 
 
途中你也会损失油量,但只要起点不能剩下油,全部运过去就行。到了刚刚新建的一个贮油点后,重复刚刚的步骤继续往前推进,运油前进一段距离(这个距离每个贮油点之间都不一样)。
 
注意!!!!:(每次往返回去装油的时候必须刚好耗光才算是最省油的)
如果你理解了我刚刚的说的意思,那么你就可以利用倒推法的。
因为是哟啊最省油的方法,所以最后一个贮油点距离终点一定是刚好500km,
因为这样司机到站刚好耗光所有油量,可得知最后一个贮油点是500升。
用我刚刚说的每个站点相差500升,那么往回倒推next站点就是1000->1500->2000.........->?(起点)。
然后往返次数也可以从最后一个站点推出来,假设最后一个站点是第一个站点,画图得知至少往返三次,两次放下油,有一次是中间回去装油的时候,也要耗掉油。那么第二个就是1000升,往返次数至少3次,(为什么是3次:因为上面我说了,每个贮油点距离都是不一样的,你要在最后一个贮油点放下500升,那么你就至少需要往返3次,有一次是空载,你要回去装油,你不可能一下子放下500,你途中也会损耗)
 
再往回倒推就是1500升,要在第二个放下1000升,那么需要至少五次,有两次空载,三次是放油的,因为车子只有500升容量,不能装太多,放三次油算是极限了,每次回去耗掉的和放下的必须刚好用光。下面的也是以此类推。
 
代码如下:
#include<stdio.h>
int main()
{ int oil[10];
int km[10];
km[0] = 500;//倒推第一站距离500km
oil[0] = 500; //倒推第一站500升
int i;
/*
第一站距离终点:500/1 贮油点500升
第二站距离终点:500 + 500/3 500*2
第三站 : 500 + 500/3 + 500/5 500*3
...
...
...
*/
int k = 0;
for(k = 0; km[k] <= 1000; k++)
{
km[k+1] = km[k] + 500/(2*(k+2)-1);//每一站距离终点的距离
oil[k+1] = oil[k] + 500;//每一站的油量 }
//printf("%d\n", km[k]);
//printf("%d", oil[k]);
km[k] = 1000;
/*
最后倒推到起点后,
距离终点应该是1000,
因为循环出来后km[k]可能不是1000,需要置为1000
*/ printf("站点\t距起点km\t站点贮油量\n");
for(i = 0; i <= k; i++)
{
printf("%d\t%d\t\t%d\n", i+1, 1000-km[k-i], oil[k-i]);
} return 0;
}

运行结果:

 
 

C语言:贮油点建设问题(详解题目意思)的更多相关文章

  1. Go语言Slice作为函数参数详解

    Go语言Slice作为函数参数详解 前言 首先要明确Go语言中实质只有值传递,引用传递和指针传递是相对于参数类型来说. 个人认为上诉的结论不对,把引用类型看做对指针的封装,一般封装为结构体,结构体是值 ...

  2. 状压DP入门详解+题目推荐

    在动态规划的题型中,一般叫什么DP就是怎么DP,状压DP也不例外 所谓状态压缩,一般是通过用01串表示状态,充分利用二进制数的特性,简化计算难度.举个例子,在棋盘上摆放棋子的题目中,我们可以用1表示当 ...

  3. quartz定时任务cron表达式讲解及翻译成现实语言的插件的使用详解

    cron表达式讲解 参见该网址: https://www.cnblogs.com/GarfieldTom/p/3746290.html cron表达式只有专业技术人员才看得懂,普通人不知道表达式是什么 ...

  4. GO语言数组和切片实例详解

    本文实例讲述了GO语言数组和切片的用法.分享给大家供大家参考.具体分析如下: 一.数组 与其他大多数语言类似,Go语言的数组也是一个元素类型相同的定长的序列. (1)数组的创建. 数组有3种创建方式: ...

  5. C语言:内存字节对齐详解[转载]

    一.什么是对齐,以及为什么要对齐: 1. 现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定变量的时候经常在特定的内存地址访问, ...

  6. Unix/Linux环境C编程入门教程(41) C语言库函数的文件操作详解

     上一篇博客我们讲解了如何使用Linux提供的文件操作函数,本文主要讲解使用C语言提供的文件操作的库函数. 1.函数介绍 fopen(打开文件) 相关函数 open,fclose 表头文件 #in ...

  7. C语言函数参数的传递详解

    一.三道考题 开讲之前,我先请你做三道题目.(嘿嘿,得先把你的头脑搞昏才行--唉呀,谁扔我鸡蛋?)考题一,程序代码如下:void Exchg1(int x, int y){   int tmp;    ...

  8. C语言缓冲区(缓存)详解

    缓冲区又称为缓存,它是内存空间的一部分.也就是说,在内存空间中预留了一定的存储空间,这些存储空间用来缓冲输入或输出的数据,这部分预留的空间就叫做缓冲区.缓冲区根据其对应的是输入设备还是输出设备,分为输 ...

  9. R语言do.call 函数用法详解

    虽然R语言有类型很丰富的数据结构,但是很多时候数据结构比较复杂,那么基本就会用到list这种结构的数据类型.但是list对象很难以文本的形式导出,因此需要一个函数能快速将复杂的list结构扁平化成da ...

  10. Go语言学习之8 goroutine详解、定时器与单元测试

    主要内容: 1.Goroutine2. Chanel3. 单元测试 1. Goroutine Go 协程(Goroutine)(轻量级的线程,开线程没有数量限制).   (1)进程和线程 A. 进程是 ...

随机推荐

  1. Nacos无法连接wsl2上部署的MySQL

    情况描述 在部署Nacos时,需要连接MySQL数据库管理数据,但是如果连接的是wsl2上部署的MySQL,使用127.0.0.1或者localhost,通常会出现如下错误: org.springfr ...

  2. 在HarmonyOS上实现ArkTS与H5的交互

      介绍 本篇Codelab主要介绍H5如何调用原生侧相关功能,并在回调中获取执行结果.以"获取通讯录"为示例分步讲解JSBridge桥接的实现. 相关概念 Web组件:提供具有网 ...

  3. ​总结:Apache/Tomcat/JBOSS/Jetty/Nginx之区别和联系​

    总结:Apache/Tomcat/JBOSS/Jetty/Nginx之区别和联系 总结:Apache/Tomcat/JBOSS/Nginx区别 . 1.Apache是Web服务器,Tomcat是应用( ...

  4. 如何在报表中绘制 SVG 统计图

    SVG 作为一种矢量图形,具有任意缩放不失真.可被高质量打印.文件较小.交互性强等优势,正逐渐成为一种主流的图片格式.润乾报表一方面可以生成 SVG 格式的统计图,另一方面也可以在 HTML5 中直接 ...

  5. docker 应用篇————容器卷[十一]

    前言 简单介绍一下容器卷. 正文 我们发现一个文件,就是什么呢? 就是说因为我们的容器一但删除那么什么都没有了. 那么如何能够不删除呢?那么可以使用容器卷. 比如说系统我们容器内的/usr 使用我们的 ...

  6. Unable to determine application id: com.android.tools.idea.run.ApkProvisionException: No outputs for the main artifact of variant: debug

    前言 遇到这种情况极大可能属于gradle 与 android studio版本不匹配的情况. 因为我是在升级android studio遇到的这个问题. 方法 一个方法是:降低android stu ...

  7. mysql 重新整理——索引优化explain简单介绍 [八]

    前言 做开发的我们晓得一个道理,就是说不是说你说这东西性能稳定就是性能稳定,你说发版本就发版本,这个是测试部门说了算的. 那么索引优化的关键也就是说一个我们来逐步调优,调优就要知道我们这条语句在mys ...

  8. VulnHub-ical打靶记录

    这绝对是最简单的一个题目了. 目标发现 netdiscover -r 192.168.0.10/24 根据靶场和本地系统的网段进行扫描. 信息收集 nmap -sV -Pn -sT -sC -A 19 ...

  9. 第四章:if else switch使用

    /* * @Issue: 输入整数a和b,若a²+b²大于100,则输出a²+b²之和的百位以上的数字,否则直接输出a²+b²的和 * @Author: 一届书生 * @LastEditTime : ...

  10. 初探Mysql架构和InnoDB存储引擎

    前言 mysql相信大家都不陌生了,分享之前我们先思考几个面试题: 1.undo log和redo log了解过吗?它们的作⽤分别是什么? 2.redo log是如何保证事务不丢失的? 3.mysql ...