欢迎访问==> 【考研OR保研】机试题
题目描述
创建一个 CTriangle 类,用 $3$ 点来代表一个三角形,输入三个点的坐标,实现判断此三角形是不是直角三角形,并输出此三角形的周长。
输入格式
第一行包含整数 $T$,表示共有 $T$ 组测试数据。
每组数据占一行,包含 $6$ 个整数分别表示三个点的横纵坐标。
输出格式
每组数据输出两行,第一行根据是否直角三角形输出 Yes
或 No
,第二行输出三角形的周长,保留小数点后两位。
数据范围
$1 \\le T \\le 10$,
坐标取值范围 $\[0,5\]$,
保证输入的三个点能够构成三角形。
输入样例:
1
0 0 3 0 0 4
输出样例:
Yes
12.00
C++ 代码
#include <bits/stdc++.h>
using namespace std;
//定义点的类
class CPoint
{
public:
int x, y;
//运算符重载,获得两点之间的距离的平方
double operator- (const CPoint &t) const
{
double dx = x - t.x;
double dy = y - t.y;
return dx * dx + dy * dy;
}
};
class CTriangle
{
public:
CPoint a, b, c;
//判断是否是直角三角形 a^2 + b^2 == c^2
bool is_right_triangle()
{
double dd[3] = {a - b, b - c, a - c};
sort(dd, dd + 3);
if(dd[0] + dd[1] == dd[2]) return true;
else return false;
}
//获得三角形的周长
double get_perimeter()
{
double dd[3] = {a - b, b - c, a - c};
return sqrt(dd[0]) + sqrt(dd[1]) + sqrt(dd[2]);
}
};
int main()
{
int T;
cin >> T;
while(T -- )
{
CTriangle t;
cin >> t.a.x >> t.a.y >> t.b.x >> t.b.y >> t.c.x >> t.c.y;
if(t.is_right_triangle()) puts("Yes");
else puts("No");
printf("%.2lf\n", t.get_perimeter());
}
}