@huangdanning
2021-08-10T16:20:24.000000Z
字数 1157
阅读 579
题解
洛谷
编程
题目描述
输入一组勾股数 (三数不相等),用分数格式输出其较小锐角的正弦值。(要求约分。)输入格式
一行,包含三个正整数,即勾股数 (无大小顺序)。输出格式
一行,包含一个分数,即较小锐角的正弦值输入输出样例
输入
3 5 4
输出
3/5
声明:本人是一个超级蒟蒻,思路有些过于简单,还请各位大佬勿见笑。
拿到题目先看题面,本题体面很简洁明了,分析后得知(废话):
进一步的实现题目要求
简单的说,正弦 就是 对边:斜边 的值
斜边 是三角形中最长的边
所以先通过无脑的判断语句确定好斜边的数值 为
根据正弦的定义 : 对边 / 斜边
又因为分数中 分母相同时 分子越小分数值越小
所以可以判断需要取最小对边
本题中则是 两数中小的那个作为 对边 为
用超级简单的暴力化简方法 - 利用循环使 分别除以从开始的各种整数
如果两数可以同时整除一个数 则使两数同时除以 并使归为 重新开始循环,直到一个非常大的数为止
(经过测试,本题数据相对较水,所以我的代码中i的上线是 这个质数)
蒟蒻的代码,各位大佬请赏脸一观,如有错误请及时纠正,万分感谢
#include <bits/stdc++.h> //万能头文件
using namespace std;
int main(0){
// 定义变量并赋初值
long long int a,b,c,m = 0,sin1,sin2;
cin >> a >> b >> c;
// 调整a,b,c顺序,使c为最大值
if (a > c) {
m = c;
c = a;
a = m;
} else if (b > c) {
m = c;
c = b;
b = m;
}
//赋予sin1(分子)sin2(分母)数值
sin2 = c;
if (a > b) sin1 = b;
else sin1 = a;
// cout << sin1 << '/' << sin2 << "\n"; //调试-对比以观察以下约分是否有误
//小学方法暴力约分
for (int i = 2;i <= 50;i ++){
if ( (sin1 % i == 0) && (sin2 % i == 0) ){
sin1 /= i;
sin2 /= i;
i = 2;
}
}
//输出"分子/分母"
cout << sin1 << '/' << sin2 << "\n";
//完结撒花\(@^0^@)/
return 0
}
/*
备注 本代码拥有放抄袭(虽然可能对于这种简单题有点大材小用emm)
声明 本题解版权归H:sDc:N所有
更好的阅读体验欢迎来访关注本人博客:chuxjian.asia
*/
谢谢您能抽出时间来阅读本篇文章
如果您觉得还过的去,还请点个赞鼓励一下吧~