uva10112 Myacm Triangles

题目已经给出来了公式,求面积的,不过也可以在百度上找到其他的求面积公式,只是想要寻找内部和边缘都没有点的三角形,我刚开始没想到很好的办法,后来看到一位前辈的方法,确实很简单的就能理解了,只是让自己想的话,就算是费上半天的劲,也想不到好的办法

View Code
#include<stdio.h>
#include<math.h>
double area(int x1,int y1,int x2,int y2,int x3,int y3)
{
    return fabs(0.5*((y3-y1)*(x2-x1)-(y2-y1)*(x3-x1)));
}
int main()
{
    int x[16], y[16], n, i, j, k, r, one, two, three, flag;
    char point[16];
    double s, _s;
    while(scanf("%d",&n) && n)
    {        
        for(i = 0;i < n; i++)
        {
            getchar();
            point[i] = getchar();
            scanf("%d%d",&x[i],&y[i]);
        }
        _s = 0;
        for(i = 0;i < n-2; i++)
            for(j = i+1;j < n-1; j++)
                for(k = j+1;k < n; k++)
                {
                    s = area(x[i],y[i],x[j],y[j],x[k],y[k]);
                    flag = 1;
                    for(r = 1;r < n; r++)
                    {
                        if((r != i) && (r != j) && (r != k))
                        {
                            if(s==area(x[i],y[i],x[j],y[j],x[r],y[r])+area(x[i],y[i],x[r],y[r],x[k],y[k])+area(x[r],y[r],x[j],y[j],x[k],y[k]))
                            {
                                flag = 0;
                                break;
                            }
                        }
                    }
                    if(flag && s > _s){_s = s; one = i; two = j; three = k;}
                }
                printf("%c%c%c\n",point[one],point[two],point[three]);
    }
    return 0;
}
原文地址:https://www.cnblogs.com/SDUTYST/p/2620616.html