एलेक्स मार्टेली एक बीजीय समाधान जो मैं यहाँ संपूर्णता के लिए शामिल करेंगे की तरफ इशारा करता। यह युगपत समीकरण के उपयोग के साथ बाहर काम किया जा सकता है। एक सरल गणितीय समाधान होने के नाते, यह संभवतः सबसे तेज़ है कम से कम के लिए बड़े पैर और सिर की संख्या :-)
करते हैं:
H सिर की संख्या हो;
L पैरों की संख्या हो;
Cचूजों की संख्या हो; तथा
P सूअरों की संख्या हो।
यह देखते हुए Cऔर P, हम साथ अन्य दो चर की गणना कर सकते हैं:
H = C + P (1)
L = 2C + 4P (2)
मैं विस्तार करेंगे हर नीचे गणना में कदम। गणितीय इच्छुक कोई संदेह नहीं है का कहना है कि कर सकते हैं चरणों जोड़ा जा सकता है, लेकिन मैं स्पष्ट रखना पसंद किया है। से (1), हम गणना कर सकते हैं:
H = C + P
=> 0 = C + P - H [subtract H from both sides]
=> 0 = H - C - P [multiply both sides by -1]
=> P = H - C [add P to both sides] (3)
और स्थानापन्न कि में (2):
L = 2C + 4P
=> L = 2C + 4(H - C) [substitute H-C for P]
=> L = 2C + 4H - 4C [expand 4(H-C) to 4H-4C]
=> L = 4H - 2C [combine 2C-4C into -2C]
=> 0 = 4H - 2C - L [subtract L from both sides]
=> 2C = 4H - L [add 2C to both sides]
=> C = 2H - L/2 [divide both sides by 2] (4)
अब आपके पास दो सूत्र, एक है कि सिर और पैर से चूजों की संख्या की गणना कर सकते हैं (4)अन्य जो चूजों और सिर से सूअरों की संख्या की गणना कर सकते हैं, (3)।
तो यहाँ यह करने के लिए पायथन कोड, उपयुक्त चेकों के साथ सुनिश्चित करने के लिए आप अधिक विचित्र गणितीय समाधान के कुछ की अनुमति नहीं है 2 सिर और 7 पैरों हमें एक सुअर और आधे से एक लड़की के साथ एक आधा, या 1 सिर दे रही है की तरह है, और 12 पैरों 5 सूअर और -4 चूजों दे रही है :-)
def solve (numLegs, numHeads):
# Use the formulae (these make integers).
chicks = numHeads * 2 - int (numLegs / 2)
pigs = numHeads - chicks
# Don't allow negative number of animals.
if chicks < 0 or pigs < 0:
return [None, None]
# Don't allow fractional animals.
if chicks * 2 + pigs * 4 != numLegs:
return [None, None]
if chicks + pigs != numHeads:
return [None, None]
return [pigs, chicks]
बेशक, अगर आप सिर या पैर की आंशिक संख्या में पारित, सभी दांव बंद कर रहे हैं। यहां एक संपूर्ण परीक्षण कार्यक्रम ताकि आप सुनिश्चित करने के लिए दोनों तरीकों का एक ही मान विभिन्न मूल्यों की कोशिश कर सकते हैं:
import sys
def usage (reason):
print "Error: %s"%(reason)
print "Usage: solve <numHeads> <numLegs>"
sys.exit (1);
def solve1 (numLegs, numHeads):
for numChicks in range (0, numHeads + 1):
numPigs = numHeads - numChicks
totLegs = 4 * numPigs + 2 * numChicks
if totLegs == numLegs:
return [numPigs, numChicks]
return [None, None]
def solve2 (numLegs, numHeads):
chicks = numHeads * 2 - int (numLegs / 2)
pigs = numHeads - chicks
if chicks < 0 or pigs < 0: return [None, None]
if chicks * 2 + pigs * 4 != numLegs: return [None, None]
if chicks + pigs != numHeads: return [None, None]
return [pigs, chicks]
if len (sys.argv) != 3:
usage ("Wrong number of parameters (%d)"%(len (sys.argv)))
try: heads = int (sys.argv[1])
except: usage ("Invalid <numHeads> of '%s'"%(sys.argv[1]))
try: legs = int (sys.argv[2])
except: usage ("Invalid <numLegs> of '%s'"%(sys.argv[2]))
print "[pigs, chicks]:"
print " ", solve1 (legs, heads)
print " ", solve2 (legs, heads)