标签:turn a* while Fix fixed 否则 接收 类型 杭电oj
该算法给出的题目就是根据已给出的三个点的坐标,求出所给三角形外切圆的周长,此题的关键是在于求出园的半径,如果按照普通的做法求出两条边的垂直平分线,再求出圆心,最后求出半径比较麻烦,可以直接用公式求出外切圆的周长公式如下:
三角形三边a,b,c,半周长p(p=(a+b+c)/2) 面积:S= √[p(p - a)(p - b)(p - c)] 外接圆半径 R=abc/4S 外接圆半径 R=abc/4√[p(p - a)(p - b)(p - c)] 外接圆周长C=2*PAI*R
其实这道题更偏向于数学题,最后给出代码
#include<iostream>
#include<iomanip>
#include<math.h>
using namespace std;
int main()
{
//三角形三边a,b,c,半周长p(p=(a+b+c)/2)
//面积:S= √[p(p - a)(p - b)(p - c)]
//外接圆半径 R=abc/4S
//外接圆半径 R=abc/4√[p(p - a)(p - b)(p - c)]
//外接圆周长C=2*PAI*R
double PI = 3.141592653589793;
double x1, y1, x2, y2, x3, y3;
while (cin >> x1 >> y1 >> x2 >> y2 >> x3 >> y3)
{
double a = sqrt((x1-x2)*(x1 - x2)+(y1-y2)*(y1-y2));
double b = sqrt((x1 - x3)*(x1 - x3) + (y1 - y3)*(y1 - y3));
double c = sqrt((x3 - x2)*(x3 - x2) + (y3 - y2)*(y3 - y2));
double p = (a + b + c) / 2;
cout << fixed << setprecision(2)<< 2 * PI*a*b*c / (4 * sqrt(p*(p - a)*(p - b)*(p - c))) << endl;
}
return 0;
}
指的注意的是在接收输入的三个点的坐标时要用double类型,否则虽然可以通过样例,但是会报错。
标签:turn a* while Fix fixed 否则 接收 类型 杭电oj
原文地址:https://www.cnblogs.com/ljysy/p/12380513.html