题目ID :L1-067
分数 :10分
语言:Java / Python
题目描述
科幻电影《流浪地球》中一个重要的情节是地球距离木星太近时,大气开始被木星吸走,而随着不断接近地木"刚体洛希极限",地球面临被彻底撕碎的危险。
洛希极限(Roche limit)是一个天体自身的引力与第二个天体造成的潮汐力相等时的距离。当两个天体的距离少于洛希极限,天体就会倾向碎散,继而成为第二个天体的环。
计算公式:
- 洛希极限 = 密度比值 × 倍数(大天体半径倍数)
倍数:
- 流体:2.455
- 刚体:1.26
判断条件:如果两个天体的距离 / 大天体半径 >= 洛希极限,则不会被撕碎。
输入格式
输入在一行中给出3个数字,依次为:
- 大天体密度与小天体的密度的比值开3次方后计算出的值(≤1)
- 小天体的属性(0表示流体、1表示刚体)
- 两个天体的距离与大天体半径的比值(>1 但不超过10)
输出格式
在一行中首先输出小天体的洛希极限与大天体半径的比值(输出小数点后2位);随后空一格;最后输出:
^_^如果小天体不会被撕碎T_T如果小天体会被撕碎
输入样例
0.622 0 1.4
输出样例
1.53 T_T
解题思路
- 根据小天体属性(0=流体,1=刚体)选择对应的倍数
- 计算洛希极限 = 密度比值 × 倍数
- 比较距离与大天体半径的比值与洛希极限:
- 如果距离比 >= 洛希极限:不会被撕碎,输出
^_^ - 如果距离比 < 洛希极限:会被撕碎,输出
T_T
- 如果距离比 >= 洛希极限:不会被撕碎,输出
代码实现
Java
java
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
double density = scanner.nextDouble(); // 密度比值开三次方
int type = scanner.nextInt(); // 0=流体, 1=刚体
double dist = scanner.nextDouble(); // 距离与大天体半径的比值
// 计算洛希极限
double roche = type == 0 ? density * 2.455 : density * 1.26;
// 输出结果
System.out.printf("%.2f ", roche);
if (dist >= roche) {
System.out.println("^_^");
} else {
System.out.println("T_T");
}
}
}
Python
python
density, typ, dist = map(float, input().split())
typ = int(typ)
# 计算洛希极限
roche = density * 2.455 if typ == 0 else density * 1.26
# 输出结果
print(f"{roche:.2f}", end=" ")
if dist >= roche:
print("^_^")
else:
print("T_T")
运行验证
| 样例输入 | 样例输出 | 结果 |
|---|---|---|
| 0.622 0 1.4 | 1.53 T_T | ✅ |
| 0.622 1 1.4 | 0.78 _ | ✅ |
样例1解释:密度比0.622,流体倍数2.455,洛希极限=1.53,距离比1.4 < 1.53,会被撕碎。
样例2解释:密度比0.622,刚体倍数1.26,洛希极限=0.78,距离比1.4 >= 0.78,不会被撕碎。
复杂度分析
- 时间复杂度:O(1)
- 空间复杂度:O(1)
总结
本题考察简单的数学计算和条件判断:
- 根据属性选择正确的倍数
- 计算洛希极限
- 比较判断并输出相应表情