首页 > 代码库 > acdream 1203 解三角形

acdream 1203 解三角形

已知角a,b,c,d求角aed.(0=<a,b,c,d<90)

思路:其实和边没关系,都相似的。不妨设ab=10.0;

由正弦定理容易求出 ad,ae,余弦定理求出de。

答案就呼出来了。最后求反三角。

算法没问题。但是比赛时候一直跪。。。后来躺床上一想,哎!acrsin返回的是 (-pai/2,pai/2)!若是钝角他返回锐角啊!sb了!所以判断一下脚aed是否大于90,再做正弦定理。或者直接用arccos求,返回的是(0,pai).

#include<iostream>
#include<cmath>
#include<cstdio>
using namespace std;
const  double pai=3.14159265;
int main()
{
      double a,b,c,d;
    while(cin>>a>>b>>c>>d)
    {
        if(a==0||c==0)
          {
              printf("0.00\n");
              continue;
          }
        else if(b==0)
        {
            printf("%.2f\n",c);
            continue;
        }
        else if(d==0)
        {
            printf("%.2f\n",b+c);
            continue;
        }
         else
         {
             double jiao1=180.0-a-b-c;
            double jiao2=180.0-b-c-d;
             double x1=10.000;
             double x2=x1/sin(jiao1/180.0*pai)*sin(c/180.0*pai);
             double x4=x1/sin(jiao2/180.0*pai)*sin((c+d)/180.0*pai);
             double de=sqrt(x2*x2+x4*x4-cos(a/180.0*pai)*2*x2*x4);
            double ans=asin(x2*sin(a/180*pai)/de)/pai*180;
            if((de*de+x4*x4-x2*x2)/(2*x4*de)<0)
             printf("%.2f\n",180-ans);
            else printf("%.2f\n",ans);
         }
    }
 return 0;
}


acdream 1203 解三角形