luogu-P1426 小鱼会有危险吗
GESP二级练习,多层循环和分支练习,难度★✮☆☆☆。
luogu-P1426 小鱼会有危险吗
题目要求
题目描述
有一次,小鱼要从 A 处沿直线往右边游,小鱼第一秒可以游 米,从第二秒开始每秒游的距离只有前一秒的 。有个极其邪恶的猎人在距离 A 处右边 米的地方,安装了一个隐蔽的探测器,探测器左右 米之内是探测范围。一旦小鱼进入探测器的范围,探测器就会在这一秒结束时把信号传递给那个猎人,猎人在一秒后就要对探测器范围内的水域进行抓捕,这时如果小鱼还在这范围内就危险了。也就是说小鱼一旦进入探测器范围,如果能在下 秒的时间内马上游出探测器的范围,还是安全的。现在给出 和 的数据,请你判断小鱼会不会有危险?如果有危险输出
y
,没有危险输出n
。
输入格式
一行内输入两个实数,用空格分隔,表示 和 。
输出格式
一行内输出’y’或者’n’表示小鱼是否会有危险。
输入 #1
14 1
输出 #1
n
数据规模与约定
对于 的数据,保证 ,小数点后最多有 位小数。
题目分析
解题思路
首先,我们需要理解题目的核心要求:
- 判断小鱼是否会进入危险区域
解题思路:
- 小鱼每秒游的距离逐渐减少
- 需要判断小鱼是否会进入探测器的范围
- 如果小鱼进入探测器范围,判断其能否在下一秒内游出
具体实现:
- 读入目标距离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 认证学习微信公众号

Last updated on