有一個三角形工廠有一個很大的問題。給你一些邊的邊長,
想辦法找出用這些邊長圍出最大的三角形。
你必須寫一個程式來幫助他們尋找這個三角形。
輸入說明 :
一開始有一個數字代標有幾個測資,每一個測資的開頭 有一個正整數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
沒有留言:
張貼留言