[关闭]
@huangdanning 2021-08-10T16:20:24.000000Z 字数 1157 阅读 579

「题解」洛谷-P1888 入门题『三角函数』

题解 洛谷 编程


更好的阅读体验-作业部落
更好的阅读体验-本人博客

题目部分

传 送 门

题目描述
输入一组勾股数 (三数不相等),用分数格式输出其较小锐角的正弦值。(要求约分。)

输入格式
一行,包含三个正整数,即勾股数 (无大小顺序)。

输出格式
一行,包含一个分数,即较小锐角的正弦值

输入输出样例

输入
3 5 4
输出
3/5

正文部分

声明:本人是一个超级蒟蒻,思路有些过于简单,还请各位大佬勿见笑。

步骤一

拿到题目先看题面,本题体面很简洁明了,分析后得知(废话)

步骤二

进一步的实现题目要求

正弦及斜边

简单的说,正弦 就是 对边:斜边 的值
斜边 是三角形中最长的边
所以先通过无脑的判断语句确定好斜边的数值 为

最小正弦

根据正弦的定义 : 对边 / 斜边
又因为分数中 分母相同时 分子越小分数值越小
所以可以判断需要取最小对边
本题中则是 两数中小的那个作为 对边 为

化简分数

用超级简单的暴力化简方法 - 利用循环使 分别除以开始的各种整数
如果两数可以同时整除一个数 则使两数同时除以 并使归为 重新开始循环,直到一个非常大的数为止
(经过测试,本题数据相对较水,所以我的代码中i的上线是 这个质数)

我的代码

蒟蒻的代码,各位大佬请赏脸一观,如有错误请及时纠正,万分感谢

  1. #include <bits/stdc++.h> //万能头文件
  2. using namespace std;
  3. int main(0){
  4. // 定义变量并赋初值
  5. long long int a,b,c,m = 0,sin1,sin2;
  6. cin >> a >> b >> c;
  7. // 调整a,b,c顺序,使c为最大值
  8. if (a > c) {
  9. m = c;
  10. c = a;
  11. a = m;
  12. } else if (b > c) {
  13. m = c;
  14. c = b;
  15. b = m;
  16. }
  17. //赋予sin1(分子)sin2(分母)数值
  18. sin2 = c;
  19. if (a > b) sin1 = b;
  20. else sin1 = a;
  21. // cout << sin1 << '/' << sin2 << "\n"; //调试-对比以观察以下约分是否有误
  22. //小学方法暴力约分
  23. for (int i = 2;i <= 50;i ++){
  24. if ( (sin1 % i == 0) && (sin2 % i == 0) ){
  25. sin1 /= i;
  26. sin2 /= i;
  27. i = 2;
  28. }
  29. }
  30. //输出"分子/分母"
  31. cout << sin1 << '/' << sin2 << "\n";
  32. //完结撒花\(@^0^@)/
  33. return 0
  34. }
  35. /*
  36. 备注 本代码拥有放抄袭(虽然可能对于这种简单题有点大材小用emm)
  37. 声明 本题解版权归H:sDc:N所有
  38. 更好的阅读体验欢迎来访关注本人博客:chuxjian.asia
  39. */

谢谢您能抽出时间来阅读本篇文章
如果您觉得还过的去,还请点个赞鼓励一下吧~

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注