当前位置:首页>python>Python编程题:26.P1888 三角函数

Python编程题:26.P1888 三角函数

  • 2026-09-21 16:22:52
Python编程题:26.P1888 三角函数

点击蓝字 关注我们

今天要做的是来自洛谷网站的P1888 三角函数。

https://www.luogu.com.cn/problem/P1888

有账号的可以上去做做。

P1888 三角函数

题目描述

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

输入格式

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

输出格式

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

输入输出样例

解题思路

输入三个互不相等的勾股数a,b,c(顺序随机)。

勾股定理:直角三角形三边,最长边为斜边;

直角三角形中:最短边对着较小锐角;

正弦定义:sin=对边/斜边;

最后把分数约分为最简分数,以 分子/分母 形式输出。

关键步骤:

①排序区分最短边、最长边(斜边);

②求分子、分母最大公约数 gcd;

③分子分母同除以 gcd 约分。

  • 读取三个整数,放入列表排序;排序后:x, y, z = sorted([a,b,c])x:最短直角边,z:斜边

  • 较小锐角正弦:x/z

  • 计算 x 和 z 的最大公约数;

  • 输出 分子/分母。

知识点

  • 字符输入 input() 获取字符串,split()分割字符串,int()转换成整数。

    a=map(int,input().split())

  • 列表的排序:sorted(list1)返回排序后的列表。list1.sort()则直接对原列表进行修改。

  • 求最大公因数:math库中的gcd()函数,或者反复相除(具体如下)

  • 条件判断if,同时满足and

参考代码及解析

1、a,b,c=map(int,input().split()):读取一行三个字符串,转为整数,依次赋值给变量 a,b,c。

2、nums=sorted([a,b,c]):把三个数放入列表,执行从小到大排序;

3、a,b,c=nums:将排序后的列表重新赋值:新 a = 最短边,新 b = 中间直角边,新 c = 斜边。

4、for i in range(a,0,-1):循环变量 i 从当前 a(最短边)开始,递减到 1,步长 -1。思路:从最大可能的数往下寻找公因数,找到第一个就是最大公约数。

5、if a%i==0 and c%i==0:        break

判断:i 同时整除分子a、分母c;

一旦找到满足条件的 i,立刻break跳出循环,此时i就是最大公因数。

6、print("%d/%d"%(a//i,c//i)):分子、分母分别除以最大公约数 i 完成约分;

本题也可以直接用math中的gcd(a,b)来求取最大公因数,记得要import math

如果你觉得意犹未尽,那就趁热打铁,继续挑战一下吧!

range(a,0,-1) 循环中 i 会取到 0。()

A.√  B.×

点击空白处查看答案

答案:B

range 左闭右开,终止边界 0 取不到,i 最小到 1。

最新文章

随机文章