洛谷P1426 小鱼会有危险吗

题目描述

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

输入格式

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

输出格式

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

输入输出样例
输入
14 1
输出
n
原题地址–>link
分析

这道题很简单,竟然没有用到精度的检测。起初,我打算,如果不控制精度,试一下看能不能过。结果竟然全部AC了。这道题太简单。这里说两点。
一、不要忘记了,刚开始就被检测到的情况。思考的范围要全覆盖。
二、精度的控制是必须要掌握的。遇到浮点型数值,比大小时都必须将有关精度的代码写上去。必备技能哦!

const double eps = 1e-8;
#define Equ(a,b) (fabs((a)-(b))//等于
#define More(a,b) ((a)-(b)>eps)//大于
#define  Less(a,b) ((a)-(b)<(-eps))//小于
#define  MoreEqu(a,b) ((a)-(b)>(-eps))//大于等于
#define LessEqu(a,b) ((a)-(b)<(eps))//小于等于
Code
#include 
using namespace std;
int main()
{
    double s,x;
    cin >> s >> x ;
    double distance=7,temp=7;
    if((s-x)<=0)//刚开始准备游,就被检测到了
    {
        if(distance<=s+x)
        {
            cout << "y";
            return 0;
        } else{
            cout << "n";
            return 0;
        }
    }
    while(distance<=s-x)//排除刚开始就被检测到的情况后的情况
    {
        temp*=0.98;
        distance+=temp;
    }
    distance=distance+temp*0.98;
    if(distance<=s+x)
        cout << "y";
    else    cout << "n";
    return 0;
}

你可能感兴趣的:(洛谷刷题,c++)