The Fun Of Algorithm - Day4 - 百钱百鸡问题

问题描述

中国古代数学家张丘建在他的《算经》中提出了一个著名的‘百钱百鸡问题’:一只公鸡值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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值