香蕉还是相交?(C++) kkmd66

思路

1、默认都相交,找出不相交的即可。
2、重点关注一下判断重合的条件。

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

#include <iostream>

using namespace std;

/**
 * kkmd66
 * @return 
 */

int main() {

    float x1, y1, x2, y2, x3, y3, x4, y4;

    while (cin >> x1 >> y1 >> x2 >> y2 >> x3 >> y3 >> x4 >> y4) {

        //默认相交,只需要找出不相交
        bool flag = true;

        //两条直线都存在
        if ((x2 - x1) != 0 && (x4 - x3) != 0) {
            float tanA = (y2 - y1) / (x2 - x1);
            float tanB = (y4 - y3) / (x4 - x3);
            //斜率同但不重合
            if (tanA == tanB && (y4 - tanB * x4) != (y2 - tanA * x2)) {
                flag = false;
            }
            //都垂直但不重合
        } else if ((x2 - x1) == 0 && (x4 - x3) == 0 && x3 != x1) {
            flag = false;
        }

        if (!flag) {
            cout << "No" << endl;
        } else {
            cout << "Yes" << endl;
        }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值