前言
Python每日一练来啦,本文已收录于:《Python每日一练》专栏
此专栏目的在于,帮忙学习Python的小白提高编程能力,训练逻辑思维,每周持续更新中,欢迎免费订阅!!!
我国古代数学家张丘建在《算经》一书中曾提出过著名的 “百钱买百鸡” 问题,该问题叙述如下:鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一;百钱买百鸡,则翁、母、雏各几何?
百钱买百鸡的问题算是一套非常经典的不定方程的问题,题目很简单:公鸡每只5元,母鸡每只3元,小鸡3只一元,现要求用100元钱买100只鸡(三种类型的鸡都要买),问公鸡、母鸡、小鸡各买几只?
小伙伴们看了问题描述后,一定要自己先练习,再去看博主的代码和解题思路,才能提高自己的编程水平,全靠自觉哟!!!
欢迎小伙伴们把自己的思路或答案在评论区留言,博主会选一个最优解答进行置顶。
数学解法:设公鸡买了x只,母鸡买了y只,小鸡买了z只
数量关系式: x + y + z = 100
钱的关系式:5x + 3y + z/3 = 100
1.以公鸡为突破点,公鸡5元一只,100元最多只能买20只,由于三种鸡都要买,所以公鸡数一定是小于20的。
2.母鸡每只3元,100全 拿来买母鸡,最多也不能超过33只机会。
3.设公鸡数为x,母鸡数为y,小鸡z只
4.只要满足 5x+3y+ z/3== 100 和 x + y + z == 100 就可以输出此种组合的结果。
实现代码:
import time
# 开始时间
start = time.time()
# 外层循环控制公鸡数量取值范围:0~20
for x in range(0, 21):
# 内层循环控制母鸡数量取值范围:0~33
for y in range(0, 34):
# 嵌套内层循环控制小鸡数量取值范围:0~100
for z in range(0, 101):
# 条件判断同时满足 5x+3y+ z/3== 100 和 x + y + z == 100
if (x * 5 + y * 3 + z / 3 == 100) and (x + y + z == 100):
print("公鸡有%d只\t母鸡有%d只\t小鸡有%d只" % (x, y, z))
# 结束时间
end = time.time()
print("算法总耗时:", end - start)
思考:虽然能求出结果,但仔细一想,用了三重循环, 总的循环次数:21 ∗ 34 ∗ 101 = 72114 次,太耗时间了,能不能有一种更好的解决方法呢?
思路:买了一只公鸡,花掉5钱,还剩下100 - 5 = 95 钱,买母鸡和小鸡的钱只有95钱,而不是100钱。再买一只母鸡,还剩下100- 5 - 3 = 92钱,那么买小鸡的钱只有92钱……所以每重循坏次数不再是固定的100,而是变化的。
第一重循环(公鸡):100 / 5 = 20 次
第二重循环(母鸡):(100 - x) / 3次
第三重判断(小鸡):100 - x - y次
实现代码:
import time
# 开始时间
start = time.time()
for x in range(0, 101, 5): # 公鸡
for y in range(3, 101 - x, 3): # 母鸡
z = 100 - x - y # 小鸡
if (x // 5 + y // 3 + z * 3 == 100) and (x + y + z == 100):
print("公鸡有%d只\t母鸡有%d只\t小鸡有%d只" % (x // 5, y // 3, z * 3))
# 结束时间
end = time.time()
print("算法总耗时:", end - start)
总结:方式2较方式1提升了100倍,这个小小的程序可以说明算法的重要性,用不同的算法,时间复杂度是不一样的。在实现一个功能的基础上,还要兼顾效率的问题。当然这个题目还可以用求不定方程整数解的办法来解决,这个算法用时会更短。
1. 编程小白选手
很多刚入门编程的小白学习了基础语法,却不知道语法的用途,不知道如何加深映像,不知道如何提升自己,这个时候每天刷自主刷一道题就非常重要(百炼成神),可以去牛客网上的编程初学者入门训练。该专题为编程入门级别,适合刚学完语法的小白练习,题目涉及编程基础语法,基本结构等,每道题带有练习模式和考试模式,可还原考试模式进行模拟,也可通过练习模式进行练习。
链接地址:牛客网 | 编程初学者入门训练
2. 编程进阶选手
当基础练习完已经逐步掌握了各知识要点后,这个时候去专项练习中学习数据结构、算法基础、计算机基础等。先从简单的入手,感觉上来了再做中等难度,以及较难的题目。这三样是面试中必考的知识点,我们只有坚持每日自己去多加练习,拒绝平躺持续刷题,不断提升自己才能冲击令人满意的公司。
链接地址:牛客网 | 专项练习
速度上号,大家一起冲击大厂,有疑问评论区留言解答!!!
- 最后,作者很感谢能够阅读到这里的读者。如果看完觉得好的话,还请轻轻点一下赞或者分享给更多的人,你们的鼓励就是作者继续行文的动力。
- Python基础差和想进阶提升的小伙伴可以订阅:《100天精通Python从入门到就业》专栏
- 此专栏文章是专门针对Python零基础小白所准备的一套完整教学,从0到100的不断进阶深入的学习,各知识点环环相扣。
- 订阅专栏后续可以阅读Python从入门到就业100篇文章;还可私聊进两百人Python全栈交流群(手把手教学,问题解答); 进群可领取80GPython全栈教程视频 + 300本计算机书籍:基础、Web、爬虫、数据分析、可视化、机器学习、深度学习、人工智能、算法、面试题等。
- 加入我一起学习进步,一个人可以走的很快,一群人才能走的更远!