小明问了我一个问题:
如何用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)
我的思路
- 看到这个问题第一反应就是使用循环,要先确定取值范围
- 首先公鸡的数量肯定要小于N,进一步推进就要小于N//5(理由就是一只公鸡5元)
- 两个数学表达式
x + y + z = N (公鸡,母鸡和小鸡的和应该等于N)
5x + 3y + z/3 = N - 消去z的话表达式就变成了: 14x + 8y = 2n
- 又因为z = n - x - y
- 最后判断一下y必须是整数就行了,理由就是公鸡是整数,母鸡也是证书的话那么小鸡也是这个样子的。
- 得到结果
学习体会
不是特别难的一个小练习。不过感觉也不是特别好想解决办法。一开始我用的三重循环,不过效果比较一般,换成这种思路的话效率高了一些。每天来一个python小练习保持一下手感。编程能力总是在实战中练习起来的。