有一個三角形工廠有一個很大的問題。給你一些邊的邊長,
想辦法找出用這些邊長圍出最大的三角形。
你必須寫一個程式來幫助他們尋找這個三角形。
輸入說明 :
一開始有一個數字代標有幾個測資,每一個測資的開頭 有一個正整數N(3 ≤ N ≤ 10,000),接下來的N個實數Si代表可以使用的三角形長度 (0 < si ≤ 100,000),一組測試資料可能被分成好幾行。
輸出說明 :
對於每個測試資料,印出最大三角形的面積(四捨五入到小數點第二位)。如果找不到請印出0.00
範例輸入 :
2
4 3.0 4.0 5.0 100.0
3 1.0 2.0 4.0
範例輸出 :
6.00
0.00
出處 :
UVA11579 or ACM11579 (管理:nanj0178)
程式碼 :
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int compare(const void *arg1, const void *arg2)
{
if(*(double *)arg2 < *(double *)arg1)
return -1;
else if(*(double *)arg2 == *(double *)arg1)
return 0;
else
return 1;
}
int main()
{
int i,n,line;
double s,temp,max,arr[10000];
scanf("%d",&line);
while(line--)
{
max = 0;
scanf("%d",&n);
for(i=0; i<n; i++)
scanf("%lf",&arr[i]);
qsort((void *)arr, n, sizeof(double), compare);
for(i=0; i<(n-2); i++)
{
if(arr[i] >= arr[i+1]+arr[i+2])
continue;
s = (double)(arr[i]+arr[i+1]+arr[i+2])/2;
if((temp=sqrt(s*(s-arr[i])*(s-arr[i+1])*(s-arr[i+2]))) > max)
max = temp;
}
printf("%.2lf\n",max);
}
system("pause");
return 0;
}
http://zerojudge.tw/ShowProblem?problemid=d269
