检查三个点是否线性
Check if three points are coo linear or not
我有一个问题可以检查三个点是否形成三角形。如果形成三角形,则程序应打印三角形三个边的最大长度的平方。如果没有,该程序将打印" coolinear"。
无论如何,这里都是我尝试过的样本:
#include <iostream>
#include <cmath>
using namespace std;
int main () {
double x1,y1,x2,y2,x3,y3;
double area;
double s1,s2,s3;
cin >> x1 >> y1;
cin >> x2 >> y2;
cin >> x3 >> y3;
area = 0.5*abs(((x2-x1)*(y3-y1)-(x3-x1)*(y2-y1)));
s1 = ((x1-x2)*(x1-x2))+((y1-y2)*(y1-y2));
s2 = ((x2-x3)*(x2-x3))+((y2-y3)*(y2-y3));
s3 = ((x1-x3)*(x1-x3))+((y1-y3)*(y1-y3));
if (area!=0){
if (s1 >= s2 && s1 >= s3)
cout<<s1<<endl;
if (s2 >= s1 && s2 >= s3)
cout<<s2<<endl;
if (s3 >= s1 && s3 >= s2)
cout <<s3<<endl;
}
else
cout <<"Coollinear";
return 0;
}
我在CodeForces网站上提交了此代码,因为这是我在比赛中的最后一个问题。它在测试9上给了我错误的答案,我还应该使用什么?为什么我的答案错了?
无论如何都是问题的文字:
像所有问题解决者一样,Meiko喜欢吃crepe!众所周知,可丽饼通常以三角形形状送达。现在,迈科(Meiko)想知道可丽饼的一面有多大!因此,他试图使用三个点在平面上绘制三角形,并计算三角形的三个边的最大长度。但是有时候他忙于准备训练问题的团队,他睡着了!结果,他使用的三个点可能不会形成一个可以代表一件可丽饼的三角形!只有在具有正区域的情况下,三角形才能代表一块crepe。所以你在这里帮助迈科!鉴于Meiko使用的坐标,请确定它们是否形成一个三角形,可以代表一件可丽饼。
输入三个代表Meiko使用的三个点的整数坐标(x,y)。每个点上的每个点。(-10^9&lt; = x,y&lt; = 10^9)
输出如果点形成一个可以代表一件可丽饼的三角形,请打印三角形三个侧面的最大长度的平方。否则打印"共线"而无需引号。
如果至少两个方面的长度相同,并且比第三个侧面长,则该代码将输出多个结果。必须修复三个if
陈述
#include <iostream>
#include <cmath>
using namespace std;
int main () {
double x1,y1,x2,y2,x3,y3;
double area;
double s1,s2,s3;
cin >> x1 >> y1;
cin >> x2 >> y2;
cin >> x3 >> y3;
area = 0.5*abs(((x2-x1)*(y3-y1)-(x3-x1)*(y2-y1)));
s1 = ((x1-x2)*(x1-x2))+((y1-y2)*(y1-y2));
s2 = ((x2-x3)*(x2-x3))+((y2-y3)*(y2-y3));
s3 = ((x1-x3)*(x1-x3))+((y1-y3)*(y1-y3));
if (area!=0){
if (s1 >= s2 && s1 >= s3)
cout<<s1<<endl;
else if (s2 >= s1 && s2 >= s3)
cout<<s2<<endl;
else if (s3 >= s1 && s3 >= s2)
cout <<s3<<endl;
}
else
cout <<"Coollinear";
return 0;
}
如果最大长度不是唯一的,您的代码将输出多个结果。
您可以摆脱复杂的逻辑:
#include <algorithm>
//...
if (area == 0) {
cout << "Collinear";
}
else {
cout << max({s1, s2, s3}));
}
较晚的附录,以防万一尚未解决(我无法入睡):
解决此问题的线索是描述中的"整数"一词。
您未能使用的测试案例已经构建,以便
(x2-x1)*(y3-y1)-(x3-x1)*(y2-y1)
使用浮点时是非零的,使用整数时为零。
您不需要0.5 * abs(...
来确定该区域是否为零,我希望以下工作能够工作:
#include <algorithm>
#include <iostream>
using namespace std;
int square(int x) { return x * x; }
int main () {
int x1, y1, x2, y2, x3, y3;
cin >> x1 >> y1;
cin >> x2 >> y2;
cin >> x3 >> y3;
int area = (x2 - x1) * (y3 - y1) - (x3 - x1) * (y2 - y1);
if (area != 0){
int s1 = square(x1 - x2) + square(y1 - y2);
int s2 = square(x2 - x3) + square(y2 - y3);
int s3 = square(x1 - x3) + square(y1 - y3);
cout << max(s1, max(s2, s3));
}
else
{
cout <<"Collinear";
}
}
- 在提升multi_index容器中,是否定义了"default index"?
- 在C++STL中是否有Polyval(Matlab函数)等价物?
- 检查输入是否不是整数或数字
- 是否可以初始化不可复制类型的成员变量(或基类)
- 在C++中,是否可以基于给定的标识符创建基类的新实例,反之亦然
- 是否可以通过C++扩展强制多个python进程共享同一内存
- 此代码是否违反一个定义规则
- 是否需要删除包含对象的"pair"?
- 是否可以从int转换为enum类类型
- 无论条件是否为true,if总是在c++中执行
- 如何找到大小'x'数组是否完全填充,在C++?
- 检查值是否在集合p1和p2中,但不在p3中
- 是否可以在编译时初始化数组,以便在运行时不会花费时间?
- 是否可以显示需要线性搜索的时间才能找到您在程序中找到的密钥
- 检查三个点是否线性
- 是否有机会更快地使双线性插值
- 是否可以执行范围添加更新,将线性函数添加到最大分段树中
- 有效地检验三个二进制向量在有限域上是否线性无关
- 如何检查两个 n 大小的向量是否线性依赖于C++
- 是否有一个具有良好C++接口的快速线性SVM库