2011年8月30日 星期二

d269: 11579 - Triangle Trouble

內容 :
    有一個三角形工廠有一個很大的問題。給你一些邊的邊長,
    想辦法找出用這些邊長圍出最大的三角形。
    你必須寫一個程式來幫助他們尋找這個三角形。

輸入說明 :
    一開始有一個數字代標有幾個測資,每一個測資的開頭 有一個正整數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

沒有留言:

張貼留言