思路
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;
}