进阶级Python编程题(6)洛谷(买铅笔)和(三角形分类)

题目描述

P 老师需要去商店买 n 支铅笔作为小朋友们参加 NOIP 的礼物。她发现商店一共有 33 种包装的铅笔,不同包装内的铅笔数量有可能不同,价格也有可能不同。为了公平起 见,P 老师决定只买同一种包装的铅笔。

商店不允许将铅笔的包装拆开,因此 P 老师可能需要购买超过 n 支铅笔才够给小朋友们发礼物。

现在 P 老师想知道,在商店每种包装的数量都足够的情况下,要买够至少 n 支铅笔最少需要花费多少钱。

输入格式

第一行包含一个正整数 n,表示需要的铅笔数量。

接下来三行,每行用 2 个正整数描述一种包装的铅笔:其中第 1 个整数表示这种包装内铅笔的数量,第 2 个整数表示这种包装的价格。

保证所有的 7个数都是不超过 10000 的正整数。

输出格式

1 个整数,表示 P 老师最少需要花费的钱。

代码如下:

from math import*
n=int(input())
a,b=map(int,input().split())
c,d=map(int,input().split())
e,f=map(int,input().split())
s1=ceil(n/a)*b
s2=ceil(n/c)*d
s3=ceil(n/e)*f
print(min(s1,s2,s3))

这道题的核心还是利用math库里的ceil函数,对计算结果进行取上,这样才能保证数量并且钱数最少否则的话就不能符合题意。

题目描述

给出三条线段 a,b,c 的长度,均是不大于 10000 的正整数。打算把这三条线段拼成一个三角形,它可以是什么三角形呢?

  • 如果三条线段不能组成一个三角形,输出Not triangle
  • 如果是直角三角形,输出Right triangle
  • 如果是锐角三角形,输出Acute triangle
  • 如果是钝角三角形,输出Obtuse triangle
  • 如果是等腰三角形,输出Isosceles triangle
  • 如果是等边三角形,输出Equilateral triangle

如果这个三角形符合以上多个条件,请按以上顺序分别输出,并用换行符隔开。

输入格式

输入 3 个整数 a、b 和 c。

输出格式

输出若干行判定字符串。

代码如下:

a,b,c=map(int,input().split())
if a>b:
    a,b=b,a
if b>c:
    b,c=c,b

if a+b<=c:
    print('Not triangle')
else:
    if a**2+b**2==c**2:
        print("Right triangle")
    if a**2+b**2>c**2:
        print("Acute triangle")
    if a**2+b**2<c**2:
        print("Obtuse triangle")
    if a==b :
        print("Isosceles triangle")
    if b==c:
        print("Equilateral triangle")

这道题先利用分支结构将a,b,c三者的大小关系变成a<b<c,这样在后续进行三边比较的时候更方便,根据简单的逻辑关系我们便可以从前两个分支结构中获取a<b<c,然后再判断三边大小是否能构成三角形若不可以则输出Not triangle,否则则进行三角形的判断,首先看是否是直角三角形,切记下面每一个判断语句都是并列的,这意味着每条语句都会进行判断然后在输出相应的结果,最后重要的是后两个分支语句的判断,我们已经知道a<b<c,所以在后续判断等边或等腰的时候会更方便,比如说判断是否是等腰三角形只需判断最小的两条边是否相等,而判断等边的前提必须是两天最小的边相等,所以我们只需判断最大的一条边和小的一边是否相等即可,这样我们就会更快更方便地解决这个问题,如果你想不通里面的大小关系,不妨画个三角形试试。

感谢您的观看,希望对您能有帮助!

  • 15
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值