CSU 1591: 三角形(海伦公式)

Description

star有n根火柴棒。由于他的火柴棒不是制式的,所以长度可能会不一样。现在star想选三根火柴棒搭一个三角形送给女朋友,并且希望三角形的面积尽量大。现在希望你编程告诉star可能搭成的最大三角形的面积是多少。

Input

第一行只有一个整数T(1<=T<=20),表示数据组数。
下面的T行每一行有一个整数n(3<=n<=100),表示火柴棒的数量,后面跟着n个整数Li(1<=Li<=100),表示n跟火柴棒的长度。

Output

对于每一组数据输出一个浮点数S,表示最大面积。
结果保留三位小数(四舍五入)。
如果无法搭成三角形,输出”no”。

Sample Input

3
3 3 4 5
4 3 4 5 5
3 1 1 2

Sample Output

6.000
9.165
no

已知三边求三角形面积,利用海伦公式,即

 p=(a+b+c)/2;
 s=sqrt(p*(p-a)*(p-b)*(p-c);

代码如下

#include
#include 
#include
#include
using namespace std;
int s[100];
int check(int a,int b,int c)
{
    if(a+breturn 0;
    return 1;
}

double area(int a,int b,int c)
{
    double sum,p;
    p=(a+b+c)/2.0;
    sum=sqrt(p*(p-a)*(p-b)*(p-c));
    return sum;
}

int main()
{
    int t,n;
    cin>>t;
    while(t--)
    {
        double maxn=0.0;
        cin>>n;
        for(int i=0;icin>>s[i];
        for(int i=0;ifor(int j=i+1;jfor(int k=j+1;kif(check(s[i],s[j],s[k])==0)
                  continue;
                double sum=area(s[i],s[j],s[k]);
                if(sum>maxn)
                  maxn=sum;
           }
        if(maxn)
          printf("%.3lf\n",maxn);
        else
          printf("no\n");
    }
    return 0;
} 

你可能感兴趣的:(ACM)