Python 练习(22)-易

问题描述

我国古代数学家张丘建在《张丘建算经》一书中提出了“百鸡问题”:鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?这个问题的大致意思是这样的:公鸡5文钱一只,母鸡3文钱一只,小鸡3只一文钱。
如果用100文钱买100只鸡,那么公鸡、母鸡和小鸡各应该买多少只呢?

分析:
三个未知数,两个方程。找到其中两个未知数的等量关系,遍历一个未知数,找到符合条件的组合。

代码

for i in range(1,100):
    if (200-8*i)%14==0 and (200-8*i)/14>0: #如果整除且大于零,则满足条件
        print '小鸡%d,母鸡%d,公鸡%d'%((200-8*i)/14,i,100-i-(200-8*i)/14)

上述解法是列方程,找到了母鸡和公鸡数的等量关系,即公鸡= (200-8*i)/14。然后以母鸡为变量,遍历,找到整除的即为公鸡数。
但这样需要遍历的次数较多。因为小鸡数量一定是3的倍数,如果以小鸡为变量遍历的次数会大大减小,是上述算法的1/3,所以改进为小鸡和母鸡的等量关系并遍历小鸡的数量。

for i in range(0,100,3):
    if (600-7*i)%3==0 and (600-7*i)/3>0 and 100-i-(600-7*i)/3>0:
        print '小鸡%d,母鸡%d,公鸡%d'%(i,(600-7*i)/3,100-i-(600-7*i)/3)

#结果
小鸡78,母鸡18,公鸡4
小鸡81,母鸡11,公鸡8
小鸡84,母鸡4,公鸡12
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值