题解 | #百钱买百鸡问题#

百钱买百鸡问题

http://www.nowcoder.com/practice/74c493f094304ea2bda37d0dc40dc85b

题目分析

  1. 题目翻译之后的意思是,公鸡一只5元,母鸡一只3元,小鸡三只1元
  2. 用100元买100只鸡,给出所有的购买方案

方法一:暴力遍历

  • 实现思路
    • 直观的我们可以看出公鸡最多20只就超出了价格

    • 母鸡最多34只就超出价格

    • 小鸡100只超出了数量范围

    • 因此在这个三个范围内进行暴力遍历尝试,输出符合题目要求的结果即可

while True:
    try:
        ppp = input()
        for a in range(21):                                                # a 最多买20只
            for b in range(34):                                            # b 最多买33只
                for c in range(101):                                       # c 最多买100只
                    if a + b + c == 100 and 5*a + 3*b + 1*c/3 == 100:
                        print(a,b,c)
                        
        
    except:
        break

复杂度分析

  • 时间复杂度:O(n3)O(n^3),其中n就是对应所需要购买的鸡的数量(100),对于我们要购买的鸡的数量n,由于a的遍历范围为n/5,b的遍历范围为n/3,c的遍历范围为n,因此综合三层循环的时间开销为O(n/5n/3n)O(n/5 ·n/3 ·n),即O(n3)O(n^3)
  • 空间复杂度:O(1)O(1),只引入整型变量的常数级开销

方法二:数学推导

  • 实现思路
    • 我们假定公鸡、母鸡、小鸡数量为a,b,c
    • 则有 a+b+c=100 , 5a+3b+c/3=100
    • 消去c可知
      • b = 25-7a/4
    • 因此我么可以知道a必须是4的倍数,而且b如果为正数的话要求a最大只能取3
    • 根据这个结果进行循环遍历,得到输出即可

alt

while True:
    try:
        ppp = input()
        for i in range(4):        # 数学推导,公鸡只能取0,4,8,12只
            a = 4*i
            b = 25-7*i
            c = 100-a-b
            print(a,b,c)
    except:
        break

复杂度分析

  • 时间复杂度:O(1)O(1),循环的代价和输入无关,针对该问题来讲为了得出结果循环迭代次数是固定的,我们认为是常数级别的开销
  • 空间复杂度:O(1)O(1),只引入整型变量的常数级开销
全部评论
方法一中, for c in range(101):可以去掉, 小鸡数量可以通过100 - 公鸡 - 母鸡数量得出, 没必要再循环。
1 回复 分享
发布于 2022-05-02 10:11
方法二不是a最大只能取3,是a/4最大只能取3吧
7 回复 分享
发布于 2022-04-06 21:34
直接打印,答案是固定的(手动滑稽)
2 回复 分享
发布于 2023-03-26 16:34 陕西
初中生,这题我会!!!高中生,这题简单!!!大学生,啊吧啊吧(???)
2 回复 分享
发布于 2023-07-05 17:10 香港
for c in range(0, 101, 3): 遍历相比会快点
1 回复 分享
发布于 2022-08-03 09:01
666
点赞 回复 分享
发布于 2022-03-05 20:03
666
点赞 回复 分享
发布于 2022-03-12 19:22
为什么a必须是4的倍数?
点赞 回复 分享
发布于 2022-04-28 14:43
最牛的是还整了个动图。。。
点赞 回复 分享
发布于 2022-05-16 18:35
这个方法确实时间复杂度和空间复杂度低,但时间都花在了分析题目上了
点赞 回复 分享
发布于 2022-09-04 20:19 广东
这里的ppp输入有什么用处吗?
点赞 回复 分享
发布于 2024-07-03 00:01 湖南

相关推荐

1. 事件概述3月10日下午,华为在“心声社区”发布长达6500字通报,曝光72名正式员工及19名非雇员在非雇员招聘中存在徇私舞弊行为,多人出卖公司信息资产获利,引发热议。- “非雇员”一般指华为OD员工,与人力服务公司签劳动合同,以派遣方式到华为工作,薪资待遇与华为内部员工基本一致,可通过考核转正。2. 相关传言与真相华为相关人士称暂无官方回应,很多传言细节不准确。 华为成都研究所员工透露,此次通报主要涉及成都研究所的数据存储部门,整个数据存储业务约100余人,此次明文通报除名辞退或通报批评的有62名,“很多部门基本全开除” 。网传任正非亲赴成都、封楼抓人等消息不实。早在2024年年中,就有...
七安有出处嘛:省流:任正非亲赴成都等消息不实,2024 年年中就有人举报了;涉及36名违规当事人,其中有13人被除名;10人有主动申报情节或情节较严重的,予以辞退处理;另有13人被劝退、个人职级降3等。另外还有26名相关管理责任人作为直接或间接管理者,被处以个人职级降6等,冻结个人涨薪、职级晋升、干部向上任命,冻结期6—12个月不等;若下属违规偶发,则仅通报批评。并没有释放100HC😂😂😂
点赞 评论 收藏
分享
01-16 18:34
四川大学 Java
欢迎加入AI:没有啥稳定不稳定,一切都源于业务快速发展还是收缩。我当年一开始去的央企,业务不赚钱,也贼卷,慢慢就开始优化了。。。
点赞 评论 收藏
分享
评论
91
21
分享

创作者周榜

更多
牛客网
牛客企业服务