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

规律是:

贮油点之间相差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. #组合计数,容斥定理#U136346 数星星

    题目 天上的繁星一闪一闪的,甚是好看.你和你的小伙伴们一起坐在草地上,欣赏这美丽的夜景. 我们假定天上有\(n\)颗星星,它们排成一排,从左往右以此编号为1到\(n\),但是天上的星星实在太多了,你和 ...

  2. 网络协议之:memcached text protocol详解

    目录 简介 memcached protocol介绍 memcached支持的命令 存储命令 读取命令 常用的其他命令 memcached服务器的返回值 支持UDP协议 总结 简介 用过缓存系统的肯定 ...

  3. Docker学习路线7:构建容器镜像

    容器镜像是可执行的软件包,包括运行应用程序所需的所有内容:代码.运行时.系统工具.库和设置.通过构建自定义镜像,您可以在任何支持Docker的平台上无缝地部署应用程序及其所有依赖项. Dockerfi ...

  4. Pyside2简单案例

    代码: from PySide2.QtWidgets import QApplication, QMainWindow, QPushButton, QPlainTextEdit app = QAppl ...

  5. HarmonyOS账号服务,畅行鸿蒙生态所有应用与服务

    账号对于用户来说并不陌生,在购买新设备或者使用新应用的时候,用户常常会被引导注册或者登录账号,账号就是用户在这些设备或应用内的通行证.根据华为上半年的一项统计,整体上中国网民人均下载App量在68个, ...

  6. 运动App如何实现端侧后台保活,让运动记录更完整?

    你在锻炼健身时,有没有遇到这样的情况?辛辛苦苦锻炼了几小时,却发现App停止了运行,本次运动并没有被记录到App上,从而失去了一个查看完整运动数据的机会? 运动类App是通过手机或者穿戴设备的传感器, ...

  7. Qt 设置图标的三种方式

    Qt 设置软件窗口图标有三种方式: 一.通过资源文件,设置图标 this->setWindowIcon(QIcon(":/logo.ico")); 二.通过 pro 文件,设 ...

  8. [Java SE] 经典问题:超出Java Long型(8字节/64位)的二进制比特流数据如何进行大数的数值计算?

    0 问题描述 经典问题:超出Java Long型(8字节/64位)的二进制比特流数据如何进行大数的数值计算? 近期工作上遇到了这个问题:需要将一个无符号数.且位长>=8字节(等于8字节时,首位b ...

  9. P10160 [DTCPC 2024] Ultra 题解

    [题目描述] 给你一个 \(01\) 序列,你可以进行如下操作若干次(或零次): 将序列中形如 \(101\cdots01\) 的一个子串(即 \(1(01)^k\),\(k\ge 1\))替换成等长 ...

  10. 真正的HTAP对用户和开发者意味着什么?

    简介: Gartner 2016 年首次提出 HTAP(Hybrid Transaction / Analytical Processing,混合事务分析处理)并给出明确的定义:即同时支持 OLTP ...