描述
纯哥想知道,平面上的三个点是否在一条直线上
输入
一个正整数n,表示n组案例。
接下来是n行,每行代表一组案例,由6个整数a、b、c、d、e、f构成,代表平面直角坐标系上的三个点(a,b), (c,d), (e,f)。
输出
针对每组案例,如果三个点在同一条直线上,则输出Yes,否则输出No。
每组案例输出完都要换行。
样例输入
2
1 1 2 2 3 3
1 1 2 3 3 2
样例输出
Yes
No
#include<iostream>
using namespace std;
int main()
{
int n;
cin >> n;
while (n--)
{
int a, b, c, d, e, f,k1,k2,k3;
cin >> a >> b >> c >> d >> e >> f;
if (c != a && e != c && e != a)
{
k1 = (d - b) / (c - a);
k2 = (f - d) / (e - c);
k3 = (f - b) / (e - a);
if (k1 == k2 && k2 == k3)
{
cout << "Yes";
}
else
{
cout << "No";
}
cout << endl;
}
else if (a == c && c == e)
{
cout << "Yes"<<endl;
}
else
{
if (b == d && d == f)
cout << "Yes";
else
cout << "No";
cout << endl;
}
}
return 0;
}
总结:分三种情况考虑:
①当三条直线的斜率都存在时,若三条直线的斜率相同,输出yes;
②三条直线的斜率都不存在,即三个横坐标相同,输出yes;
③其他情况下:若三条直线的纵坐标相同,输出yes;
否则输出no;