python 算法练习:百钱百鸡

鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?
返回值:返回一个 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()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值