社区
C语言
帖子详情
穿越沙漠的问题
solrac
2001-08-01 11:01:55
请教各位如何编写下面这个程序?
用c语言编写程序,
用一辆吉普车穿越1000km的沙漠。吉普车的总装油量为500L,耗油量为1L/km。由于沙漠中没有油库,必须先用这辆车在沙漠中建立临时油库。该吉普车要以最少的油耗穿越沙漠,应该在什么地方建立临时油库,以及在各处安放多少油为好!
...全文
623
21
打赏
收藏
穿越沙漠的问题
请教各位如何编写下面这个程序? 用c语言编写程序, 用一辆吉普车穿越1000km的沙漠。吉普车的总装油量为500L,耗油量为1L/km。由于沙漠中没有油库,必须先用这辆车在沙漠中建立临时油库。该吉普车要以最少的油耗穿越沙漠,应该在什么地方建立临时油库,以及在各处安放多少油为好!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
21 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
BUF
2001-08-03
打赏
举报
回复
好象是NOI99 的初赛题
我好象是用的二分法
z_sky
2001-08-03
打赏
举报
回复
看来早就是被考虑过的习题,我是从头考虑的,所以不得要领。
但是按原来的思路,因为设站没有成本,所以站点间隔越小总耗油越少,趋于0的时候,就是耗油的极限;
看了楼上yug(寒鹤)的解说,再回头看看程序,也许程序中设站的思路是这样的:
为了在500km的地方有500L油,那就要从前一个站至少往500km的地方送一次油,这样这个站的总油量就增加了500L,1000L的最长设站距离就是(500/3)km,就是要在距500km处(500/3)km的地方设站,并且有油1000L,以次类推下去。
wildfish
2001-08-03
打赏
举报
回复
这是道奥赛题,在电子工业出版社出的《实用算法的分析与程序设计》第一个算法就是。
可以用倒推法来解决。
yug
2001-08-02
打赏
举报
回复
其实这个问题可以换一种思路考虑。
比如,X升油最多可以跑多少公里?
或者,携带X升油跑D公里最低油耗是多少?
就第二个问题,当D比较小(<250)时,
1、直接运油到目的地的耗油率为V1=2*(X-1)/500+1(L/Km),油耗率只与X有关
2、取步长为D/2,第一次运油到D/2处,耗油率仍为V1=2*(X-1)/500+1(L/Km),因为油耗率只与X有关。第二步,耗油率为:V2=2*(X-(V1*D/2)-1)/500+1(L/Km),显然,V2<=V1,也就是说:
步长取D/2的耗油不大于步长为D时的耗油,在X较大时,这样做的效果非常明显。
到这里,已经能够说明问题了,步长越小,就会越省油,当然,在步长小到一定程度时,再减小就没什么效果了。
我做了一个程序,以油量X,步长D为参数,测试X一定时,D取多少耗油量较少,发现D取1时就差不多了;再取定D,看汽车能跑多远,发现X为3840L左右,汽车跑到1000Km。看来,上面程序的结果是对的。
当然,结果在这里已经不重要了!
solrac
2001-08-02
打赏
举报
回复
能具体的说说么?谢谢!
nn18
2001-08-02
打赏
举报
回复
电脑爱好者杂志上有
Lyh_Lorry
2001-08-02
打赏
举报
回复
这个题目记得想在初中做过
有个简单的方法,就是用尺规画图,取最短.
solrac
2001-08-02
打赏
举报
回复
一个笨办法,就是将前500km平均划分成几段,每个端点建立成一个临时油库。由于送油距离<250km,所n>=3,每个临时油库所需要储存的油量恰好是station间的距离。每个station补充的油量刚好是前一段路程所消耗的。通过对n的值变化对oil的总量求极限。不知道是否可行?
solrac
2001-08-02
打赏
举报
回复
我和z_sky的看法一样,station之间的距离应该小于250km,否则无法送油了。
z_sky
2001-08-02
打赏
举报
回复
come on
solrac
2001-08-01
打赏
举报
回复
怎么删掉?
krerix
2001-08-01
打赏
举报
回复
学习
DD88
2001-08-01
打赏
举报
回复
gz
yug
2001-08-01
打赏
举报
回复
看看
z_sky
2001-08-01
打赏
举报
回复
是练习题吗?从station(2)到station(1)有300多km,车能送油吗?送油半径超过250km,回不来了。
程序没细看,附上运行结果:
station(1)= 500.0000 oil's total (1)= 500.0000
station(2)= 166.6667 oil's total (2)= 1000.0000
station(3)= 100.0000 oil's total (3)= 1500.0000
station(4)= 71.4286 oil's total (4)= 2000.0000
station(5)= 55.5556 oil's total (5)= 2500.0000
station(6)= 45.4545 oil's total (6)= 3000.0000
station(7)= 38.4615 oil's total (7)= 3500.0000
station(8)= 22.4331 oil's total (8)= 3836.4969
sant
2001-08-01
打赏
举报
回复
main()
{
int k=1;
float station,distance,total;
station=distance=total=500.0;
while(distance<1000.0)
{
printf("station(%d)=%9.4f oil's total (%d)=%10.4f\n",k,station,k,total);
total=500.0*++k;
station=500.0/(2*k-1);
distance+=station;
}
distance-=station;
station=1000.0-distance;
printf("station(%d)=%9.4f oil's total (%d)=%10.4f\n",k,station,k,(k-1)*500+(2*k-1)*station);
}
s_sword
2001-08-01
打赏
举报
回复
main()
{
int k=1;
float s=500.0,d=500.0,t=500.0;
while (d<1000.0)
{
printf("s(%d)=%9.4f oil's total(%d)=%10.4f\n",k,s,k,t);
t=500.0*++k;
s=500.0/(2*k-1);
d+=s;
}
d-=s;
s=1000.0-d;
printf("station(%d)=%9.4 oil's(%d)=%10.4f\n",k,s,k,(k-1)*500.0+(2*k-1)*s);
}
没有验算,摘抄之谭浩强的c语言习题集与上机指导P39,3。23
TYmir
2001-08-01
打赏
举报
回复
有一个数学建模的书你可以看看!
solrac
2001-08-01
打赏
举报
回复
对不起,那句话不是我想说的意思,谁能告诉我怎么编么?谢谢
z_sky
2001-08-01
打赏
举报
回复
补充:你可以在没有跟贴的时候删除。
一种可行的方式(没有论证是否最省):
吉普车每次装满油(500L)可以在离出发点200km的地方存放100L油;
步骤:
(1)、要是吉普车在500km的地方有500L油就好了;
(2)、如果在300km的地方存有1500L油就可以达到(1),因为送两次油到500km的地方要花掉1000L油;
(3)、这样的话就要求100km的地方有((1500-300)/100)*500+500=6500L油;
(4)、从出发点往100km的地方送一次油可存300L,送21次,然后从出发点带300L油就可以了,这样共需21*500+300=10800L。
可是什么环节效率不高呢?
加载更多回复(1)
迭代法-
穿越沙漠
问题
迭代法-
穿越沙漠
问题
迭代法-
穿越沙漠
问题
迭代法-
穿越沙漠
问题
穿越沙漠
问题
《算法设计与分析》迭代法解决
穿越沙漠
问题
,C++描述。
穿越沙漠
问题
程序代码
穿越沙漠
问题
的程序代码,用了很长时间才写出来的,希望对大家有帮助!
2020年国赛B
穿越沙漠
问题
数学建模完整paper+源码.zip
博主个人参赛作品,最终拿了省一等奖,内容包括完整论文+完整matlab源码,有任何
问题
都可以私信我,博主版权所有 请勿二次上传。
数学建模2020B-
穿越沙漠
数学建模2020B——
穿越沙漠
优秀论文
C语言
70,037
社区成员
243,246
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章