用python解决N元买N鸡问题

在这里插入图片描述

小明问了我一个问题:

如何用python解决N元买N鸡问题


题目要求:

公鸡每只5元,母鸡每只3元,小鸡1元三只。
N元钱必须刚好买N只鸡,而且鸡必须整只买,不能分开买。
有几种买法呢?

输入格式:

在一行中输入一个正整数N。

输出格式

在一行中输出两个整数c,s。中间用一个空格隔开,表示N元钱买N知己共有c种买法,且所有卖法的公鸡数量之和是s。

Sample Input:

100

Sample Output

4 24
我的代码如下:
n = int(input())
count = 0
s = 0
for x in range(n // 5):
    y = (2 * n - 14 * x) / 8
    z = n - y - x
    if y == int(y) and y >= 0 and z >= 0:
        count += 1
        s += x
if count > 0:
    print(count, s)
else:
    print(0, -1)
我的思路
  1. 看到这个问题第一反应就是使用循环,要先确定取值范围
  2. 首先公鸡的数量肯定要小于N,进一步推进就要小于N//5(理由就是一只公鸡5元)
  3. 两个数学表达式
    x + y + z = N (公鸡,母鸡和小鸡的和应该等于N)
    5x + 3y + z/3 = N
  4. 消去z的话表达式就变成了: 14x + 8y = 2n
  5. 又因为z = n - x - y
  6. 最后判断一下y必须是整数就行了,理由就是公鸡是整数,母鸡也是证书的话那么小鸡也是这个样子的。
  7. 得到结果
学习体会

不是特别难的一个小练习。不过感觉也不是特别好想解决办法。一开始我用的三重循环,不过效果比较一般,换成这种思路的话效率高了一些。每天来一个python小练习保持一下手感。编程能力总是在实战中练习起来的。

加油!!!

你可以的!你总是这样相信着自己!
  • 11
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值