#19237. 太空碎片轨迹预测
太空碎片轨迹预测
数学是宇宙通用的语言,而抛物线(Quadratic Function)则是重力井中最优雅的舞步。
对于初中生来说,理解判别式(Discriminant) 的物理意义至关重要:它决定了两个物体是否会相撞,是一次擦肩而过,还是一场毁灭性的碰撞。
我为你构思了一道结合了物理运动学与数学二次方程的题目。
[OI 题库] 机器人“丹尼尔”的轨迹预判 (Daneel's Trajectory)
题目背景
“如果一个机器人能够瞬间计算出抛物线的落点,那么它接住掉落的苹果就不需要奇迹,只需要数学。” —— 《我,机器人》
在太空殖民地,R·丹尼尔(R. Daneel)是一款搭载了正子脑的先进机器人。他的任务是拦截可能会撞击生态穹顶的太空碎片。
根据雷达探测,碎片的飞行轨迹的高度 与时间 的关系符合二次函数:
其中:
- 代表时间(秒)。
- 代表碎片距离地面的高度(米)。
- 是由环境引力和初速度决定的系数。
你需要编写程序,计算碎片会在什么时间点撞击地面(即 的时刻)。
题目描述
输入三个浮点数 ,分别代表二次函数的系数。 请利用求根公式解方程 。
根据判别式 的情况,输出不同的结果:
- 无法撞击 ():碎片将永远不会到达地面(可能飞向太空了)。输出
No Impact。 - 擦肩而过 ():碎片轨迹与地面相切,只有一个接触瞬间。输出该时间点。
- 发生撞击 ():方程有两个解。输出这两个时间点。
- 注意:请按照时间从小到大的顺序输出。
输入格式
一行,包含三个浮点数 。 (保证 )。
输出格式
- 若无解,输出
No Impact。 - 若有一个解,输出一个浮点数,保留两位小数。
- 若有两个解,输出两个浮点数,中间用空格分隔,保留两位小数。
样例数据
样例 1 (正常落地)
-5 10 15
-1.00 3.00
(解析:方程 。化简得 ,解为 )
样例 2 (相切/单点接触)
1 -2 1
1.00
(解析:。解为 )
样例 3 (无解)
1 0 5
No Impact
(解析:)
数据范围
- 均为浮点数,绝对值不超过 。
- 。
阿西莫夫的解题指南
这道题是数学与编程的完美结合,考察了三个核心点:
- 判别式的计算:首先计算
delta = b*b - 4*a*c。 - 浮点数的运算:需要使用
sqrt()函数(需包含<cmath>头文件)。 - 逻辑分支:
if (delta < 0):无实数根。if (delta == 0):利用公式 。if (delta > 0):利用公式 。
特别提醒(给初学者的陷阱):
当 时(这在物理抛物线中很常见,因为重力向下),求根公式中的 可能会比 小。
为了稳妥起见,计算出两个根 后,建议使用 std::min 和 std::max 或者手动 if 交换,确保从小到大输出。