问题描述:鸡兔同笼问题。假设共有鸡、兔30只,脚90只,求鸡、兔各有多少只。
传统思路,使用暴力测试来枚举所有可能。
for ji in range(0, 31):
if 2*ji + (30-ji)*4 == 90:
print('ji:', ji, ' tu:', 30-ji)
但实际上不需要这么麻烦,我们换个角度来看这个问题:所有鸡、兔听口令,抬起一条腿!再抬起一条腿!现在所有的鸡都目瞪口呆地坐地上了(难道这就是传说中的呆若木鸡?),站着的都是还有两条腿站立的兔子(兔子表示压力也很大),这时站立着的腿的数量的一半是兔子,当然如果得到的数字不是整数则表示无解。代码如下:
def demo(jitu, tui):
tu = (tui - jitu*2) / 2
if int(tu) == tu:
return (int(jitu-tu), int(tu))
print(demo(30, 90))