1615 - 直角三角形
创建一个CTriangle 类,需要用到第二题中创建的类,即用3点来代表一个三角形,输入三个点的坐标,实现判断此三角形是不是直角三角形,并输出此三角形的周长。
题目输入
输入第一行为样例数m,接下来m行每行6个整数分别表示三个点的横纵坐标。
题目输出
对于每个样例输出两行,第一行根据是否直角三角形输出Yes或No,第二行输出三角形的周长,保留小数点后两位。
输入/输出样例
题目输入
1 0 0 3 0 0 4
题目输出
Yes 12.00
C语言解答
#include<stdio.h> #include<math.h> float dist(int xa,int ya,int xb,int yb){ return(float)sqrt((xa-xb)*(xa-xb)+(ya-yb)*(ya-yb)); } float zhou(float a,float b,float c) { return(a+b+c); } int main() { int x1,y1,x2,y2,x3,y3,n; float C,a,b,c; scanf("%d",&n); while(n--){ scanf("%d%d%d%d%d%d",&x1,&y1,&x2,&y2,&x3,&y3); a=dist(x1,y1,x2,y2); b=dist(x2,y2,x3,y3); c=dist(x3,y3,x1,y1); if(a*a+b*b==c*c||a*a+c*c==b*b||b*b+c*c==a*a) printf("Yes\n"); else printf("No\n"); C=zhou(a,b,c); printf("%.2f\n",C); } }
C++解答
#include <stdio.h> #include <math.h> #include <algorithm> using namespace std; class CPoint { int x, y; public: CPoint(int xx,int yy) { x=xx; y=yy; } float operator- (CPoint c); }; float CPoint::operator- (CPoint c) { return sqrt((x-c.x)*(x-c.x)+(y-c.y)*(y-c.y)); } class CTriangle { CPoint A,B,C; double AB,BC,AC; public: CTriangle(CPoint a,CPoint b,CPoint c):A(a),B(b),C(c) { AB=A-B; BC=B-C; AC=A-C; } double length(); bool fun(); }; bool CTriangle::fun() { double a=AB,b=BC,c=AC,t; if(fabs(b*b+a*a-c*c)<1e-6) return true; if(fabs(c*c+a*a-b*b)<1e-6) return true; if(fabs(b*b+c*c-a*a)<1e-6) return true; return false; } double CTriangle::length() { return AB+BC+AC; } int main() { //freopen("test.in", "r", stdin); //freopen("test.out", "w", stdout); int t; int ax, ay, bx, by, cx, cy; scanf("%d", &t); while (t--) { scanf("%d %d %d %d %d %d", &ax, &ay, &bx, &by, &cx, &cy); CPoint a(ax,ay),b(bx,by),c(cx,cy); CTriangle g(a, b, c); if (g.fun()) puts("Yes"); else puts("No"); printf("%.2f\n", g.length()); } return 0; }