问题描述
中国古代数学家张丘建在他的《算经》中提出了一个著名的‘百钱百鸡问题’:一只公鸡值5钱,一只母鸡值三钱,三只小鸡值一钱,现在要用百钱买百鸡,请问公鸡,母鸡,小鸡各多少只?
问题分析
公鸡 cock 母鸡 hen 小鸡 chicken
问题化解成不定方程组:
cock+hen+chicken=100
5 X cock+3 X hen +chicken/3 = 100
算法设计
利用穷举循环的方法来解决, 根据控制条件**if (5 * cock+3 * hen + chicken / 3.0 == 100) and (cock+hen+chicken==100)**来限制输出。此时穷举尝试次数为2134101=72114次
另外performance版本,可以将小鸡数量固定为100-cock-hen,所以穷举次数变为21*34=714,可以大大节省时间。
Code
Basic version:
# !/user/bin/python3
# -*- coding: utf-8 -*-
# @author: HHVic
# @desc: 牛顿迭代法求方程根
import time
# add timer to calculate the performance
# Basic performance
###############################################################
start = time.time()
if __name__=='__main__':
# cock表示公鸡数量,hen表示母鸡数量,chicken表示小鸡数量,总共100只
# 外层循环控制共计数量取值范围为0-20
cock=0
while cock<=20:
#内层循环控制母鸡数量取值范围为0-33
hen=0
while hen<=33:
#控制小鸡数量取值范围为0-100
chicken=0
while chicken<=100:
#条件控制
if (5*cock+3*hen+chicken/3.0==100) and (cock+hen+chicken==100):
print('cock=%2d,hen=%2d,chicken=%2d\n' %(cock,hen,chicken))
chicken+=1
hen+=1
cock+=1
end = time.time()
print("The Basic Runtime is {0}".format((end-start)))
结果:
cock= 0,hen=25,chicken=75
cock= 4,hen=18,chicken=78
cock= 8,hen=11,chicken=81
cock=12,hen= 4,chicken=84
The Basic Runtime is 0.0230405330657959
Performance version:
# !/user/bin/python3
# -*- coding: utf-8 -*-
# @author: HHVic
# @desc: 牛顿迭代法求方程根
import time
# add timer to calculate the performance
# Basic performance
###############################################################
start = time.time()
if __name__=='__main__':
# cock表示公鸡数量,hen表示母鸡数量,chicken表示小鸡数量,总共100只
# 外层循环控制共计数量取值范围为0-20
cock=0
while cock<=20:
#内层循环控制母鸡数量取值范围为0-33
hen=0
while hen<=33:
#控制小鸡数量取值范围为0-100
chicken=100-cock-hen
#条件控制
if 5*cock+3*hen+chicken/3.0==100:
print('cock=%2d,hen=%2d,chicken=%2d\n' %(cock,hen,chicken))
hen+=1
cock+=1
end = time.time()
print("The Basic Runtime is {0}".format((end-start)))
结果
cock= 0,hen=25,chicken=75
cock= 4,hen=18,chicken=78
cock= 8,hen=11,chicken=81
cock=12,hen= 4,chicken=84
The Basic Runtime is 0.001001119613647461