UVa第一卷最后一题。
求内部不含点并且面积最大的三角形。
暴力。
代码如下:
1 #include<iostream> 2 #include<cstdio> 3 #include<cmath> 4 #include<cstring> 5 6 using namespace std; 7 8 typedef struct node 9 { 10 char ch; 11 int x, y; 12 }node; 13 14 node dot[20]; 15 16 double mianji(int i, int j, int k) //求三角形的面积 17 { 18 return fabs(0.5*((dot[k].y-dot[i].y)*(dot[j].x-dot[i].x)-(dot[j].y-dot[i].y)*(dot[k].x-dot[i].x))); 19 } 20 21 int judge(int i, int j, int k, int l) //判断点是否在三角形之内 22 { 23 if (mianji(i,j,k)>=mianji(j,k,l)+mianji(i,k,l)+mianji(i, j, l)) 24 return 1; 25 return 0; 26 } 27 28 int main() 29 { 30 int n, i, j, k, l; 31 char s[3]; 32 while(cin >> n, n) 33 { 34 memset(s, 0, sizeof(s)); 35 for (i=1; i<=n; i++) 36 cin >> dot[i].ch >> dot[i].x >> dot[i].y; 37 double maxs=0; 38 for (i=1; i<=n-2; i++) 39 { 40 for (j=i+1; j<=n-1; j++) 41 { 42 for (k=j+1; k<=n; k++) 43 { 44 int flag=0; 45 for (l=1; l<=n; l++) 46 { 47 if (l == i || l == j || l == k) 48 continue; 49 if (judge(i, j, k, l)) 50 { 51 flag=1; 52 break; 53 } 54 } 55 double t=mianji(i, j, k); 56 if (flag == 0 && maxs < t) 57 { 58 maxs=t; 59 s[0]=dot[i].ch; 60 s[1]=dot[j].ch; 61 s[2]=dot[k].ch; 62 } 63 } 64 } 65 } 66 cout << s[0] << s[1] << s[2] << endl; 67 } 68 return 0; 69 }