PythonACM测试题之香蕉还是相交?

题目信息

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


题目来源: http://acm.zjgsu.edu.cn/problems/67

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值