FZU 1076 穿越沙漠(水~)

4 篇文章 0 订阅

Description
一辆吉普车来到x公里宽的沙漠边沿A点,吉普车的耗油量为1升/公里,总装油量为500升。通常,吉普车必须用自身油箱中的油在沙漠中设置若干个临时储油点,才能穿越沙漠的。假设在沙漠边沿A点有充足的汽油可供使用,那么吉普车从A点穿过这片沙漠到达终点B,至少要耗多少升油。请编写一个程序,计算最少的耗油量(精确到小数点后3位)。
(1)假设吉普车在沙漠中行进时不发生故障;
(2)吉普车在沙漠边沿A点到终点B的直线距离为x≧500公里(即沙漠宽度);
Input
输入的第一行含一个正整数k(1<=k<=6),表示测试例的个数。后面紧接着k行,每行对应一个测试例,包含一个正整数x,表示从A点到B点的距离(1<=x<=2000)
Output
每个测试例对应一行输出,包含一个数,表示最少的油耗量
Sample Input
2
500
1000
Sample Output
500.000
3836.497
Solution
简单题,逆推即可,n<=500时不用多说,当n>500时,我们反向考虑每次汽车加满500L汽油可以跑多远,显然第一段500L油可以跑完最后500公里,而若想让汽车在500公里处有500L汽油而路上消耗500L,则第二段路程为500/3公里,若想让汽车在500+500/3公里处有1000L汽油而路上消耗500L,则第三段路程为500/5公里(汽车每次出发都加满500L汽油,一共往返两次,第三次就将所有油用完,所以在路上跑了5次),以此类推,设汽车跑了res段,则耗油500resL,路程为
x=n-(500/1+500/3+…+500/(2*res-1)),而开始的n-x公里汽车为了在n-x公里处存500resL油则需要在这段路上跑2res-1次,耗油为(2res-1)*(n-x),总耗油量就是500res+(2res-1)(n-x)
Code

#include<stdio.h>
int main()
{
    int t;
    double n;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%lf",&n);
        double ans=0;
        int res=0;
        if(n<=500)
        {
            printf("%.3lf\n",n);
            continue;
        }
        while(n>0)
        {
            res++;
            n-=500.0/(2*res-1);     
        }
        ans=500.0*res+(2*res-1)*n;
        printf("%.3lf\n",ans);
    }
    return 0;
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值