luogu-P1426 小鱼会有危险吗

luogu-P1426 小鱼会有危险吗

GESP二级练习,多层循环和分支练习,难度★✮☆☆☆。

luogu-P1426 小鱼会有危险吗

题目要求

题目描述

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

输入格式

一行内输入两个实数,用空格分隔,表示 ssxx

输出格式

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

输入 #1

14 1

输出 #1

n

数据规模与约定

对于 100%100\% 的数据,保证 1s,x1001 \leq s,x\le100,小数点后最多有 66 位小数。


题目分析

解题思路

  1. 首先,我们需要理解题目的核心要求:

    • 判断小鱼是否会进入危险区域
  2. 解题思路:

    • 小鱼每秒游的距离逐渐减少
    • 需要判断小鱼是否会进入探测器的范围
    • 如果小鱼进入探测器范围,判断其能否在下一秒内游出
  3. 具体实现:

    • 读入目标距离s和误差范围x
    • 初始化当前速度和总距离
    • 使用循环模拟小鱼的游动过程
    • 检查小鱼是否进入探测器范围
    • 判断小鱼能否在下一秒内游出探测器范围
    • 输出结果为‘y’或‘n’表示小鱼是否会有危险

{% include custom/custom-post-content-inner.html %}


示例代码

#include <iostream>
using namespace std;
int main() {
    double s, x;  // 定义变量:s为目标距离,x为误差范围
    cin >> s >> x;  // 输入目标距离和误差范围
    double t = 0;  // 定义变量t,表示当前速度
    double ans = 0;  // 定义变量ans,表示当前总距离
    for (int i = 1;; i++) {  // 无限循环,直到满足条件退出
        if (ans >= s - x) {  // 如果当前总距离大于等于目标距离减去误差范围
            if (ans + t * 0.98 > s + x) {  // 如果当前总距离加上减速后的速度大于目标距离加上误差范围
                cout << "n";  // 输出“n”,表示不能到达
                return 0;  // 结束程序
            } else {
                cout << "y";  // 输出“y”,表示可以到达
                return 0;  // 结束程序
            }
        }
        if (i == 1) {  // 如果是第一次循环
            t += 7;  // 初始速度增加7
        } else {
            t *= 0.98;  // 之后每次循环速度乘以0.98,表示减速
        }
        ans += t;  // 更新当前总距离
    }
    return 0;  // 结束程序
}

{% include custom/custom-post-content-footer.md %}

所有代码已上传至Github:https://github.com/lihongzheshuai/yummy-code

luogu-”系列题目可在 洛谷题库 在线评测。

bcqm-”系列题目可在 编程启蒙题库 在线评测。

GESP/CSP 认证学习微信公众号
GESP/CSP 认证学习微信公众号
Last updated on