这一题其实很简单,我们只要明白如何求出较小锐角的正弦值就可以了。
正弦应该都知道吧,不知道戳这儿(正弦)
而根据“大边对大角,小边对小角”我们就可以推出,较小边与斜边的正弦值就是较小锐角的正弦值。
c++自带gcd求最大公约数函数,但在这里写出代码,解释一下原理~~(其实是我懒,顺便求出约分后的值了QwQ)~~
好了不多说 ,亮代码!
#include //c++标准输入输出流
using namespace std; //命名空间
long long maxn,minn; //分别为斜边以及最短边
long long gcd(long long,long long);
int main() //主函数
{
long long a,b,c; //由于数据出了int范围,所以用long long
cin>>a>>b>>c;
minn=a; //假设a为最小数
if(b<minn) minn=b; //一旦小于最小数,就替换
if(c<minn) minn=c; //同上
maxn=a; //道理同上,只是改为了最大数判断
if(b>maxn) maxn=b;
if(c>maxn) maxn=c;
cout<<gcd(minn,maxn)<<"/"<<gcd(maxn,minn);
return 0; //结束主函数
}
long long gcd(long long a,long long b)
{
int yue;
for(int i=a;i>=1;i--)//从高到低循环,确保求得的是最大公约数(无需判断a,b的大小)
{
if(a%i==0 && b%i==0)
//判断是否可以同时整除
{
yue=i;
break; //跳出循环
}
}
return a/yue; //返回值
}
附赠:GCD优化:
long long gcd(long long a,long long b)
{
int aa=a,bb=b;
while(aa!=bb)
{
if(aa>bb)
{
aa=aa-bb;
}
else
{
bb=bb-aa;
}
}
return a/aa;
}
int gcd(int a,int b)
{
return b ? a : gcd(a%b);
}