题目:一辆吉普车穿越1000km的沙漠。吉普车的总装油量为500L,耗油率为1L/km。由于沙漠中没有油库,必须先用这辆车在沙漠中建立临时油库。若吉普车用最少的耗油量穿越沙漠,应在哪些地方建立油库,以及各处存储的油量是多少?
思路:从终点往前推。距离终点500km应有一个加油站,油量为500L,这样当吉普车到达该加油站时,能直接到达终点,并且油刚好用完(吉普车达到该加油站时也正好用完之前的油)。然后思考第2个加油站,从刚刚的加油站往前推,吉普车要运500L的油放在第1个加油站,必然需要来回运,至少需要走3段路。要想让这段路尽量长,就要多耗油,最多能耗500L油,500L油能走500km,每段走500/3km,所以,第2个加油站的油量为500L+500L(运到第1个加油站的油量+路上耗油),距离终点500km+500/3km……
#include<iostream>
using namespace std;
int main(){
cout<<"从终点往起点:"<<endl;
int k=1,oil=500,dis=500;
int x=2*k-1;//走多少段路 ,来回运
while(dis<1000){
cout<<"第"<<k<<"个加油站:共"<<oil<<"L油,距离终点"<<dis<<"km"<<endl;
k++;
x=2*k-1;
oil=oil+500;
dis=dis+500/x;
}
if(dis>=1000){
oil=oil-500;
dis=dis-500/x;
oil=oil+(1000-dis)*(2*k-1);
dis=1000;
cout<<"第"<<k<<"个加油站:共"<<oil<<"L油,距离终点"<<dis<<"km"<<endl;
}
return 0;
}