题目信息
Description:
小菜最喜欢吃香蕉啦所以千万别在小菜面前提香蕉两字,不然他肯定缠着问你要哈哈~。What?“相交”也读作“香蕉”,好吧,那我们就慷慨点吧,来算算下面的问题有没有小菜喜欢的东西。
输入输出及测试案例
Input:
多组数据,每组数据为两行,包含8个整数,分别表示四个坐标,(X1,Y1)至(X4,Y4),0<=Xi,Yi<=1000,前两个坐标和后两个坐标分别确定一条直线,计算这两条直线是否相交或重合?
Output:
两条直线若相交,输出Yes,若不相交,输出No,每个实例输出为一行
Sample Input:
1 1 2 2
2 1 3 2
1 1 2 2
2 1 3 3
Sample Output:
No
Yes
个人参考答案
解题思路
这道题可以使用无限循环,通过 try-except 块来处理输入,直到输入结束(即出现 EOFError 错误)为止。对于每组输入,我们先将它们转换成整数并存储在变量中。然后,我们计算两条线段所在直线的斜率和截距,并根据斜率是否相等来判断两条直线是否平行或重合。最后,我们输出判断结果。
代码实现
while True:
try:
x1, y1, x2, y2 = map(int, input().split())
x3, y3, x4, y4 = map(int, input().split())
# 计算两条线段所在直线的斜率和截距
if x1 == x2: # 第一条直线垂直于x轴
k_1 = None
b_1 = x1
else:
k_1 = (y2 - y1) / (x2 - x1)
b_1 = y1 - k_1 * x1
if x3 == x4: # 第二条直线垂直于x轴
k_2 = None
b_2 = x3
else:
k_2 = (y4 - y3) / (x4 - x3)
b_2 = y3 - k_2 * x3
# 判断两条直线是否平行或重合
if k_1 == k_2 and b_1 != b_2:
print("No")
# 判断两条直线是否相交
else:
print("Yes")
except EOFError:
break