洛谷题解 P1888 【三角函数】

思路

这一题其实很简单,我们只要明白如何求出较小锐角的正弦值就可以了。

较小锐角的正弦值

正弦应该都知道吧,不知道戳这儿(正弦)
而根据“大边对大角,小边对小角”我们就可以推出,较小边与斜边的正弦值就是较小锐角的正弦值。

关于约分

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);
} 

你可能感兴趣的:(洛谷题解 P1888 【三角函数】)