小鱼是否有危险(等比数列求和)

题目描述

有一次,小鱼要从A处沿直线往右边游,小鱼第一秒可以游7米,从第二秒开始每秒游的距离只有前一秒的98%。有个极其邪恶的猎人在距离A处右边s米的地方,安装了一个隐蔽的探测器,探测器左右x米之内是探测范围。一旦小鱼进入探测器的范围,探测器就会在这一秒结束时把信号传递给那个猎人,猎人在一秒后就要对探测器范围内的水域进行抓捕,这时如果小鱼还在这范围内就危险了。也就是说小鱼一旦进入探测器范围,如果能在下1秒的时间内马上游出探测器的范围,还是安全的。现在给出s和x的数据,请你判断小鱼会不会有危险?如果有危险输出'y',没有危险输出'n'。

//感谢黄小U饮品完善题意

输入输出格式

输入格式:

一行内输入两个实数,用空格分隔,表示s和x。均不大于100

输出格式:

一行内输出'y'或者'n'表示小鱼是否会有危险。

输入输出样例

输入样例#1: 复制

14 1

输出样例#1: 复制

n

思路

等比求和,之后稍微做了一个扩展把它扩展到正实数。分别求出小鱼进入探测范围和离开探测范围时距离出发所经过的时间即可。

假设经历时间为t,所走路程为trip,则有:

trip=7*(1-0.98^t)/(1-0.98)

由此依照换底公式解得:

t=log0.98(1-0.02*s/7)

即t=log(1-0.02*s/7)/log(0.98)

#include<iostream>
#include<cmath>
using namespace std;
int main()
{
    double s,x;
    cin>>s>>x;
    double start,end;
    start=log(1-0.02*(s-x)/7)/log(0.98);   //小鱼进危险区时间
    end=log(1-0.02*(s+x)/7)/log(0.98);      //小鱼出危险区时间
    if(end-start>=1)                        //判断时间相隔是否大于1s
    {
        cout<<"y";                          //大于1s有危险
    }
    else cout<<"n";
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq1013459920/article/details/81396312