def solve(numLegs, numHeads):
for numSpiders in range(0, numHeads + 1):
for numChicks in range(0, numHeads - numSpiders + 1):
numPigs = numHeads - numChicks - numSpiders
totLegs = 4*numPigs + 2*numChicks + 6*numSpiders
if totLegs == numLegs:
return [numPigs, numChicks, numSpiders]
return [None, None, None]
def barnYard(heads, legs):
pigs, chickens, spiders = solve(legs, heads)
if pigs == None:
print "There is no solution."
else:
print 'Number of pigs: ', pigs
print 'Number of Chickens: ', chickens
print 'Number of Spider: ', spiders
barnYard(20,56) # 8 pigs - 12 chickens
barnYard(21,62) # 10 pig - 11 chickens
20头56条腿返回8头猪和12只鸡,所以我做了21和62添加蜘蛛,但它仍然返回猪和鸡,代码有什么问题?在
谢谢!在
一个由2个方程和3个变量组成的线性系统是不确定的,任何给定的参数集都可能有多个解;这确实是您所展示的代码的情况。如果你想要的是用尽可能少的蜘蛛得到解决方案(如果有的话),那么代码没有问题。在
如果您想用尽可能多的蜘蛛来获得解决方案(如果有的话),请先尝试“many spider”,例如更改外部循环,现在
也就是说,首先尝试在根本没有蜘蛛的情况下获得解决方案,如果失败,则尝试使用一个蜘蛛,以此类推,取而代之的是:
^{pr2}$它反过来(这就是},依此类推。在
reversed
的作用),它将首先尝试numHeads
蜘蛛,然后{(你的方程实际上是丢番图方程,即严格基于整数的方程,与允许分数解的普通线性方程相比,这有着重要的意义,但你这里的问题与丢番图方程问题无关,只与欠定线性系统有关)。在
您的代码是正确的-在最外层的}。由于
for
循环的第一次迭代中,numChicks
是{solve
一旦找到有效匹配项就会返回,因此不会尝试另一个可能的有效匹配项。在您可以将
return
语句更改为yield
语句,并迭代solve
的结果,以获得所有可能的组合。在例如:
将输出:
^{pr2}$你的代码绝对没有问题。这是一个完全有效的结果。用10头猪和11只鸡,你得到
10+11=21
头,10*4 + 11*2
=62条腿。在所以它返回一个正确的结果。在
现在,如果您将其更改为10头62条腿,并将代码更改为蜘蛛的8条腿,那么您将得到3头猪、1只鸡和6只蜘蛛的结果。在
您的代码只是最后一次尝试spider,所以除非有成为spider,否则不会得到任何spider。在
相关问题 更多 >
编程相关推荐