鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?
返回值:返回一个 list,数列的元素为三元组,代表(鸡翁、鸡母、鸡雏)的数量,如:[[0,25,75], [4,18,78], [8,11,81]],表示返回三组解,每一组解以三元 list 表示。
#coding: utf-8
#百钱百鸡问题
#答案:[[0,25,75],[4,18,78],[8,11,81],[12,4,84]]
import time
#方法一:暴力破解
def solution1():
start_time = time.time()
for n in range(1000):
result = []
for x in range(0,21):
for y in range(0,34):
for z in range(0,101,3):#z是3的倍数,要不然xy不是整数
if x + y + z ==100:
if 5*x + 3*y + z/3 == 100:
result.append([x,y,z])
print(result)
print(time.time() - start_time)
#运行1000次时间:4.37525
#方法二:解方程式
#由x+y+z=100,5x+3y+z/3=100可得7x+4y=100,z=6x+3y,3y+z=600
#所以:x<15,y<26,x=(100-4y)/7
#以我的数学水平只能解到这里了
def solution2():
start_time = time.time()
for n in range(1000):
result = []
for y in range(0,26):
if (100-4*y)%7 == 0:
x = (100-4*y)%7#7x+4y=100
else:
continue
if (600-3*y)%3 == 0:
z = (600-3*y)/3#3y+z=600
else:
continue
result.append([int(x),y,int(z)])
print(result)
print(time.time() - start_time)
#运行1000次时间:0.010800576
if __name__ == '__main__':
solution2()