题意:
一辆吉普车来到 (x) 公里宽的沙漠边沿 (A) 点,吉普车的耗油量为 (1) 升/公里,总装油量为 (500) 升。通常,吉普车必须用自身油箱中的油在沙漠中设置若干个临时储油点,才能穿越沙漠的。假设在沙漠边沿 (A) 点有充足的汽油可供使用,那么吉普车从 (A) 点穿过这片沙漠到达终点 (B),至少要耗多少升油。请编写一个程序,计算最少的耗油量(精确到小数点后 (3) 位)。
(1)假设吉普车在沙漠中行进时不发生故障;
(2)吉普车在沙漠边沿A点到终点B的直线距离为 (xgeq 500) 公里(即沙漠宽度);
分析:
逆向递推。
代码:
#include <cstdio>
using namespace std;
int main()
{
int t,k;
scanf("%d",&t);
while(t--)
{
double dis=0,oil=0,x;//距离起点的距离
scanf("%lf",&x);
k=0;
while(dis<x)
{
k++;
dis+=(500.0/(2*k-1));
oil=500.0*k;
//cout<<"dis= "<<dis<<" oil="<<oil<<endl;
}
if(dis>x)//把多走的部分减掉
oil-=(dis-x)*(2*k-1);
printf("%.3f
",oil);
}
return 0;
}