翁五钱一只,母三钱,小鸡三只一钱;百钱百鸡百鸡花百钱。
(本笔记适合能熟练应用for循环、会使if条件分支语句、能格式化字符输出的 coder 翻阅)
Python 官网:https://www.python.org/
Free:大咖免费“圣经”教程《 python 完全自学教程》,不仅仅是基础那么简单……
地址:https://lqpybook.readthedocs.io/
自学并不是什么神秘的东西,一个人一辈子自学的时间总是比在学校学习的时间长,没有老师的时候总是比有老师的时候多。
—— 华罗庚
本文质量分:
CSDN质量分查询入口:http://www.csdn.net/qc
【题目来源于 CSDN 问答社区提问“百钱百鸡”】
百钱百鸡百鸡百钱,经典循环命题,遍历解题。
算法解析:
此题目不难,就是标准循环题目。设置三层循环分别遍历0~100,找寻满足百钱百鸡的组合。
python代码
def money100Chook100_1():
#print('\n百钱买百鸡,所有组合:')
for i in range(1, 100):
for j in range(1, 100):
for m in range(1, 100):
if 5*i + 3*j + m/3 == i + j + m == 100:
#print(f"\n{f' 鸡翁{i}、鸡母{j}、鸡雏{m} ':~^32}")
print(f"\n百钱买百鸡,字典序最小的组合:\n\n{f' 鸡翁{i}、鸡母{j}、鸡雏{m*3} ':~^32}")
return
大佬的代码
for x in range(0, 21): # 翁的数量范围从0到20
for y in range(0, 34): # 母的数量范围从0到33
z = 100 - x - y # 计算雏的数量
if 5 * x + 3 * y + z / 3 == 100 and z % 3 == 0: # 满足条件的组合
print(f"翁: {x}, 母: {y}, 雏: {z}")
代码运行效果截屏图片
python代码
def money100Chook100_2():
#print('\n百钱买百鸡,所有组合:')
for i in range(1, int(100/5)):
for j in range(1, int(100/3)-1):
m = 100 - i - j
if 5*i + 3*j + m/3 == i + j + m == 100:
#print(f"\n{f' 鸡翁{i}、鸡母{j}、鸡雏{m} ':~^32}")
print(f"\n百钱买百鸡,字典序最小的组合:\n\n{f' 鸡翁{i}、鸡母{j}、鸡雏{m} ':~^32}")
return # 找到字典序最小的一组退出循环。
我写了个统计run代码用时的装饰器函数,让算法优化“看得见”。
python代码run用时统计修饰器
def useTime(fun):
from time import time
def _fun():
start = time()
print(f"\n{' 计 时 开 始 ':.^36}\n")
fun()
print(f"\n\n{' 计 时 结 束 ':.^36}\n\n{f' 调用函数run用时{time()-start:.5f}s ':~^34}\n")
return _fun
(源码较长,点此跳过源码)
#!/sur/bin/nve python
# coding: utf-8
def useTime(fun):
from time import time
def _fun():
start = time()
print(f"\n{' 计 时 开 始 ':.^36}\n")
fun()
print(f"\n\n{' 计 时 结 束 ':.^36}\n\n{f' 调用函数run用时{time()-start:.5f}s ':~^34}\n")
return _fun
@useTime
def money100Chook100_1():
print('\n百钱买百鸡,所有组合:')
for i in range(1, 100):
for j in range(1, 100):
for m in range(1, 100):
if 5*i + 3*j + m/3 == i + j + m == 100:
print(f"\n{f' 鸡翁{i}、鸡母{j}、鸡雏{m} ':~^32}")
#print(f"\n百钱买百鸡,字典序最小的组合:\n\n{f' 鸡翁{i}、鸡母{j}、鸡雏{m*3} ':~^32}")
#return
@useTime
def money100Chook100_2():
print('\n百钱买百鸡,所有组合:')
for i in range(1, int(100/5)):
for j in range(1, int(100/3)-1):
m = 100 - i - j
if 5*i + 3*j + m/3 == i + j + m == 100:
print(f"\n{f' 鸡翁{i}、鸡母{j}、鸡雏{m} ':~^32}")
#print(f"\n百钱买百鸡,字典序最小的组合:\n\n{f' 鸡翁{i}、鸡母{j}、鸡雏{m} ':~^32}")
#return # 找到字典序最小的一组退出循环。
if __name__ == '__main__':
money100Chook100_1() # 一般算法函数调用。
money100Chook100_2() # 优化算法函数调用。
我的HOT博:
本次共计收集 245 篇博文笔记信息,总阅读量 40.47w,平均阅读量 1652。已生成 15 篇阅读量不小于 4000 的博文笔记索引链接。数据采集于 2023-10-09 05:53:19 完成,用时 4 分 47.33 秒。
精品文章:
来源:老齐教室
◆ Python 入门指南【Python 3.6.3】
好文力荐:
CSDN实用技巧博文: