ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

【驻油点】一辆重型卡车欲穿过1000公里的沙漠,卡车耗油为1升/公里,卡车总载油能力为500公升。显然卡车一次是过不了沙漠的。因此司机必须设法在沿途建立几个贮油点,使卡车能顺利穿越沙漠,试问司机如何建

2021-11-30 15:33:10  阅读:242  来源: 互联网

标签:公升 oil 卡车 沙漠 司机 1000 500 dis


算法描述

从贮油点i向贮油点i+1倒推的策略是,卡车在点i和点i+1间往返若干次。卡车每次返回i+1处时正好耗尽500公升汽油,而每次从i+1出发时又必须装足500公升汽油。两点之间的距离必须满足在耗油最少的条件下使i点贮足i500分升汽油的要求(0<=i<=n-1)。具体地讲,第一个贮油点i=1应距终点i=0处500km且在该处贮藏500公升汽油,这样才能保证卡车能由i=1处到达终点i=0处,这就是说dis[1]=500oil[1]=500;为了在i=1处贮藏500公升汽油,卡车至少从i=2处开两趟满载油的车至i=1处。所以i=2处至少贮有2500公升汽油,即oil[2]=5002=1000。另外,再加上从i=1返回至i=2处的一趟空载,合计往返3次。三次往返路程的耗油量按最省要求只能为500公升。即d12=500/3kmdis[2]=dis[1]+d12=dis[1]+500/3
为了在i=2处贮存1000公升汽油,卡车至少从i=3处开三趟满载油的车至i=2处。报以i=3处至少贮有3
500公升汽油,即oil[3]=500*3=1500。加上i=2至i=3处的二趟返程空车,合计5次。路途耗油量也应为500公升,即d23=500/5,dis[3]=dis[2]+d23=dis[2]+500/5

代码

#include<stdio.h>
voidmain()
{int k;
floatd,d1;
float oil[10],dis[10];
inti;printf(“NO.distance(k.m.)toil(l.)n”);
k=1;d=500;
dis[1]=500;
oil[1]=500;
do{
k=k+1;
d=d+500/(2k-1);
dis[k]=d;
oil[k]=oil[k-1]+500;
}while(!(d>=1000));
dis[k]=1000;
d1=1000-dis[k-1];
oil[k]=d1
(2*k+1)+oil[k-1];
for(i=0;i<k;i++)
printf("%d%f%f\n",i,1000-dis[k-i],oil[k-i]);}

标签:公升,oil,卡车,沙漠,司机,1000,500,dis
来源: https://blog.csdn.net/MYS1246061533/article/details/121633148

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有