寻找三角形 (海伦公式)

来源:互联网 发布:java的反射机制详解 编辑:程序博客网 时间:2024/05/04 05:02

海伦公式S=p(pa)(pb)(pc),其中a,b,c是三角形边长,p是三角形周长的一半。


思路:枚举三角形的三个顶点,判断是否满足三个点的颜色要么全部相同,要么全部不同。


AC代码

#include <stdio.h>#include <math.h>#include <algorithm>using namespace std;const int maxn = 50+5;struct point{    char col;    double x, y, z;}a[maxn];double getLen(int i, int j) {    int p = (a[i].x-a[j].x)*(a[i].x-a[j].x)+(a[i].y-a[j].y)*(a[i].y-a[j].y)+(a[i].z-a[j].z)*(a[i].z-a[j].z);    return sqrt(p);}double getArea(int i, int j, int k) {    double a = getLen(i, j);    double b = getLen(i, k);    double c = getLen(j, k);    double p = (a+b+c) / 2;    double area = sqrt(p*(p-a)*(p-b)*(p-c));    return area;}int main() {    int n;    while(scanf("%d", &n) == 1) {        for(int i = 0; i < n; i++) {            getchar();            scanf("%c %lf %lf %lf", &a[i].col, &a[i].x, &a[i].y, &a[i].z);        }        double ans = 0;        for(int i = 0; i < n; i++)            for(int j = i+1; j < n; j++)                for(int k = j+1; k < n; k++) {                    if((a[i].col == a[j].col && a[i].col == a[k].col)) {                        ans = max(ans, getArea(i, j, k));                    }                    if(a[i].col != a[j].col && a[i].col != a[k].col && a[j].col != a[k].col) {                        ans = max(ans, getArea(i, j, k));                    }                }        printf("%.5f\n", ans);    }    return 0;}

如有不当之处欢迎指出!

原创粉丝点击