卡车穿越沙漠问题

一辆重型卡车欲穿过1000公里的沙漠,卡车耗油为1升每公里。卡车总载油量为500升。显然卡车装一次油是过不了沙漠的,因此司机需要设法在沿途建立几个加油点,(加油点的油也是由卡车从起始点运送过去的)试问,司机如何建立这些储油点,每一储油点需要存多少汽油,使得最后耗油总量最少(包括运油的耗油等等)。

思路:设a[i]为倒数第i+1个储油点与终点的距离;b[i]为倒数第i+1个储油点储油量。

首先应该明确的是,若要耗油最少:

       1.卡车从一个站点到下一个站点再返回前一个站点的时候应该刚好耗完所带的油,所以每次从储油点带走的都是500升

        2.卡车走的路程要最少,也就是说,尽量少走重复的路线。

        3.考虑到每次带走的都是500升,所以,两站之间路上消耗的是500升的时候会走最少的重复的路。

        这时候,已经知道每两站之间储油量的关系是前一站比后一站多500升,两站之间往返的路程为500公里。从第一站考虑的话是未知的,但最后一站已经很容易看出来,a[0]=500;b[0]=500;按照前面的关系可以依次计算出来与终点的距离与储油量。

         先输出的是储油点的个数,然后是从起点开始的储油点与起点的距离及它的储油量。

 

#include<iostream>

#include<iomanip>
using namespace std;
int main()
{
              double a[100];
               int b[100];
              a[0]=500;
              b[0]=500;
               int i=0;
              while(a[i]<=1000)
              {
                              i++;
                             a[i]=500.0/(2.0*(i+1)-1.0)+a[i-1];
                             b[i]=500*(i+1);
              }
              cout<<i-1<<endl;
              for(i=i-1;i>=0;i--)
                             cout<<setw(10)<<fixed<<setprecision(4)<<1000-a[i]<<"    "<<b[i]<<endl;
}

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值