【GESP】C++二级练习 luogu-P1426 小鱼会有危险吗
GESP二级练习,多层循环和分支练习,难度★✮☆☆☆。
luogu-P1426 小鱼会有危险吗
题目要求
题目描述
有一次,小鱼要从 A 处沿直线往右边游,小鱼第一秒可以游 $7$ 米,从第二秒开始每秒游的距离只有前一秒的 $98\%$。有个极其邪恶的猎人在距离 A 处右边 $s$ 米的地方,安装了一个隐蔽的探测器,探测器左右 $x$ 米之内是探测范围。一旦小鱼进入探测器的范围,探测器就会在这一秒结束时把信号传递给那个猎人,猎人在一秒后就要对探测器范围内的水域进行抓捕,这时如果小鱼还在这范围内就危险了。也就是说小鱼一旦进入探测器范围,如果能在下 $1$ 秒的时间内马上游出探测器的范围,还是安全的。现在给出 $s$ 和 $x$ 的数据,请你判断小鱼会不会有危险?如果有危险输出
y
,没有危险输出n
。
输入格式
一行内输入两个实数,用空格分隔,表示 $s$ 和 $x$。
输出格式
一行内输出’y’或者’n’表示小鱼是否会有危险。
输入 #1
1
14 1
输出 #1
1
n
数据规模与约定
对于 $100\%$ 的数据,保证 $1 \leq s,x\le100$,小数点后最多有 $6$ 位小数。
题目分析
解题思路
- 首先,我们需要理解题目的核心要求:
- 判断小鱼是否会进入危险区域
- 解题思路:
- 小鱼每秒游的距离逐渐减少
- 需要判断小鱼是否会进入探测器的范围
- 如果小鱼进入探测器范围,判断其能否在下一秒内游出
- 具体实现:
- 读入目标距离s和误差范围x
- 初始化当前速度和总距离
- 使用循环模拟小鱼的游动过程
- 检查小鱼是否进入探测器范围
- 判断小鱼能否在下一秒内游出探测器范围
- 输出结果为‘y’或‘n’表示小鱼是否会有危险
示例代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#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; // 结束程序
}
所有代码已上传至Github:https://github.com/lihongzheshuai/yummy-code
GESP各级别考纲要点、知识拓展和练习题目清单详见C++学习项目主页
“luogu-”系列题目已加入洛谷Java、C++初学团队,作业清单,可在线评测,团队名额有限,欢迎加入。
“bcqm-”系列题目可在编程启蒙题库进行在线评测。
本文由作者按照 CC BY 4.0 进行授权