*** 喵哈哈村的几何大师╰☆莣メ誋こ月

几何大师月大叔掌握429种几何画法,本次挑战是计算等腰三角形中未知角度E。通过输入已知角度A、B、C、D,利用正弦定理和余弦定理计算并输出E角的度数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Description

╰☆莣メ誋こ月是月大叔的ID,他是一个掌握着429种几何画法的的几何大师,最擅长的技能就是搞事,今天他又要开始搞事了。

这里写图片描述

给你一个等腰三角形,其中A,B,C,D角已知,求E角的角度。

Input

输入第一行包含一个正整数
t(1≤t≤100) ,表示有t组数据

对于每组数据:

第二行四个整数,A,B,C,D表示度数。满足A+B=C+D且A+B<90

Output

对于每组测试数据的询问,输出E角的度数,请保留两位小数

Sample Input

1
10 70 20 60

Sample Output

20.00

Hint

题意

题解:

正弦定理可以用 不过要注意不会存在大于90度的角(应该) (原因见代码) 用余弦加正弦更好做一些 不会出现等等情况 方法是设底为1

AC代码

#include <cstdio>
#include <cmath>
const double pi = acos(-1.0);
int main(){
    int t;
    scanf("%d",&t);
    while (t--){
        double a,b,c,d;
        scanf("%lf%lf%lf%lf",&a,&b,&c,&d);
        double x = 180-b-d-c;
        double sina = sin(a*pi/180);
        double sind = sin(d*pi/180);
        double sinx = sin(x*pi/180);
        double sinc = sin(c*pi/180);
        double cosb = cos(b*pi/180);
        double cosa = cos(a*pi/180);
        double cosx = cos(x*pi/180);
        double sinb = sin(b*pi/180);
        double tane = sina*sind*sinx/(sinc*sina*cosb+cosa*sinb*sinc-sina*sind*cosx);
        if (sinc*sina*cosb+cosa*sinb*sinc-sina*sind*cosx==0) printf("90.00\n");
        else{
            double ans = atan(tane)*180/pi;
        if (ans < 0) ans +=180;
        //应该没有大于90的情况
        printf("%.2lf\n",ans);
        }
    }
    return 0;
}

余弦 (标程)

#include<bits/stdc++.h>
using namespace std;
const double pi = acos(-1.0);
int main(){
    freopen("1.in","r",stdin);
    freopen("1.out","w",stdout);
    int t;
    scanf("%d",&t);
    while(t--){
        double a,b,c,d;
        scanf("%lf%lf%lf%lf",&a,&b,&c,&d);
        double f = 180 - a - b - c - d;
        double CD = sin((c+d)*pi/180.0) / sin(f*pi/180.0);
        double D = sin(d*pi/180.0) / sin((180-a-b-d)*pi/180.0);
        double B = sin(b*pi/180.0) / sin((180-c-d-b)*pi/180.0);

        double X1 = CD - D;
        double X2 = CD - B;

        double X3 = sqrt(X1*X1+X2*X2-2*X1*X2*cos(f*pi/180.0));

        double x4 = acos((X3*X3+X2*X2-X1*X1)/(2.0*X3*X2));
        double X4 = x4*180.0/pi;

        double h = 180 - b - c - d;

        double ans = 180 - h - X4;

        printf("%.2f\n",ans);
    }
}

还有人向量做啊 想不出来
*向量解法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值