483 字
2 分钟
【洛谷】P1888

原文链接:https://www.luogu.com.cn/problem/P1888

本文许可:CC BY 4.0

[洛谷]P1888#

[原题跳转] 以下是原题:

P1888 三角函数#

题目描述#

输入一组勾股数 a,b,c(a≠b≠c)a,b,c(a\neq b\neq c),用分数格式输出其较小锐角的正弦值。(要求约分。)

输入格式#

一行,包含三个正整数,即勾股数 a,b,ca,b,c(无大小顺序)。

输出格式#

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

输入输出样例 #1#

输入 #1#

3 5 4

输出 #1#

3/5

说明/提示#

数据保证:a,b,ca,b,c 为正整数且 ∈[1,109]\in [1,10^9]。

简而言之,就是给你三个边的参数,要你自己找斜边,并计算最小锐角的正弦值,最小锐角一定是短直角边所对的角,因此 sin 值 = 短直角边 / 斜边。 以下是代码:

import math
# 读入三个直角边
a, b, c = map(int, input().split())
# 1. 斜边一定是最大的那条
hypotenuse = max(a, b, c)
# 2. 剩下两条就是直角边,取其中较小的那条
if a != hypotenuse and b != hypotenuse:
shorter_leg = min(a, b)
elif a != hypotenuse and c != hypotenuse:
shorter_leg = min(a, c)
else: # b、c 是直角边
shorter_leg = min(b, c)
# 3. 约分后输出:短直角边 / 斜边
g = math.gcd(shorter_leg, hypotenuse)
print(f"{shorter_leg // g}/{hypotenuse // g}")

gcd函数原理讲解#

gcd可以用if语句来进行表述,如下:

def gcd(x, y):
while y:
x, y = y, x % y
return x

if a == xie_bian:
leg1,leg2=b,c
elif b == xie_bian:
leg1,leg2=a,c
else:
leg1,leg2=a,b

刚说完有人不用简洁的方法手写判断式,别骂了别骂了,列表推导式太难理解了

【洛谷】P1888
https://mikufans.yuzhiyuan.top/posts/洛谷p1888/
作者
遇缘
发布于
2025-11-14
许可协议
CC BY-NC-SA 4.0

分享文章

生成精美分享图或复制链接,与更多人分享本文。

继续阅读

沿着主题读

基于共同的标签与分类

换条路线

从其他文章中稳定抽取

最后更新于 ,距今已过 324 天

部分内容可能已过时