题目链接:三角函数 - 洛谷
题目描述
输入一组勾股数 a,b,c(a≠b≠c)a,b,c(a\neq b\neq c)a,b,c(a=b=c),用分数格式输出其较小锐角的正弦值。(要求约分。)
输入格式
一行,包含三个正整数,即勾股数 a,b,ca,b,ca,b,c(无大小顺序)。
输出格式
一行,包含一个分数,即较小锐角的正弦值
输入输出样例
输入 #1
3 5 4
输出 #1
3/5
说明/提示
数据保证:a,b,c 为正整数且 ∈[1,10^9]。
解题思路:因为输入的是勾股数,所以肯定是直角三角形,根据大角对大边可知,直接将输入的三条边取最小和最大相比即可。如果可以约分则将其约分。
代码:
我的编译器直接用__gcd()会报错,所以我自己写了一个gcd函数原理是九章算术的更相减损法,本题该代码在洛谷不知道为什么没有AC
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
ll gcd(ll a, ll b)//用更相减损法实现
{
if (a == b) return a;
if (a > b) gcd(a - b, b);
if (a < b) gcd(b - a, a);
}
int main()
{
ll a[3];
cin >> a[0] >> a[1] >> a[2];
sort(a, a + 3);//从大到小排列
ll x = gcd(a[0], a[2]);
cout << a[0] / x << "/" << a[2] / x << endl;
return 0;
}