Python百鶏百元(暴力解読のいくつかの考え)

2226 ワード

Pythonの中の百鶏百銭の経典の暴力のアルゴリズム
アルゴリズムには多くの方法があります.例えば、二分法、二叉樹法、循環反復法、バブルソート法、暴力解読法など様々なアルゴリズムがあります.これらのアルゴリズムは異なるモデルに対して、モデルは先に説明しません.私たちが今日主に議論しているのは暴力解読法も貧挙法と呼ばれています.このアルゴリズムはかなりその名前に合っています.暴力のため比較的簡単で、適用する人は暴力が好きで、簡単な人ですが、最も効率的ではないかもしれません.簡単に言えば、利点:このアルゴリズムは簡単で、暴力、効果は直感的で、欠点:運行効率が低く、メモリなどの消費が大きい.次は百鶏百元について説明します.
 
百元百鶏:我が国の古代数学者張丘建が『算経』という本の中で提出した数学問題:鶏翁は一価五、鶏母は一価三、鶏雛は三価一である.百元で百鶏を買って、鶏翁、鶏母、鶏雛の各幾何学を聞きますか?
原文:雄鶏は1羽5元、雌鶏は1羽3元、ひよこは3羽1元.どのように100元で100羽の鶏を買いますか.その中の雄鶏、雌鶏、ひよこの数はそれぞれいくらですか?
題意から、2つの100、雄鶏の数に雌鶏の数を加えるニワトリの数を加えるニワトリの数を加えるのは100に等しく、総価格は100に等しいことがわかる.すなわち、雄鶏の数がxに等しいと仮定すると、
雌鶏の数はyに等しく、ニワトリの数はzに等しい.
5x+3y+z/3=100
x+y+z=100
今x,y,zの値はそれぞれいくらですか?
pythonを使用して、次のように答えます.
count=0
#       ,    
for x in range(1000):
#range(?)          ,        ,   for       
    for y in range(1000):
#  。
        count+=1
#       1,       
        z=100-x-y
        if 5*x+3*y+z/3==100 and z%3==0:
#            100  
           print('  :%d,,  %d,  :%d'%(x,y,z))
#    ,      
           print(count)
#       
#       :
  :0,,  25,  :75
26
  :4,,  18,  :78
4019
  :8,,  11,  :81
8012
  :12,,  4,  :84
12005
         12005 。          

ループの回数を変更して、何が起こるか見てみましょう.
count=0
for x in range(100):
    for y in range(100):
        count+=1
        z=100-x-y
        if 5*x+3*y+z/3==100 and z%3==0:
           print('  :%d,,  %d,  :%d'%(x,y,z))
           print(count)
#    :
  :0,,  25,  :75
26
  :4,,  18,  :78
419
  :8,,  11,  :81
812
  :12,,  4,  :84
1205
           ,    ,     ,                       

サイクル数を再修正し、答えを徹底的に明らかにします.
count=0
for x in range(20):
    for y in range(33):
        count+=1
        z=100-x-y
        if 5*x+3*y+z/3==100 and z%3==0:
           print('  :%d,,  %d,  :%d'%(x,y,z))
           print(count)
#    :
  :0,,  25,  :75
26
  :4,,  18,  :78
155
  :8,,  11,  :81
284
  :12,,  4,  :84
401
#        20 33 ?  ,       ,     5,100      20   ,     #5x=100,  x=20
#  ,     33,  3y=100,  y=33.3333....
#  ,z%3,            3  0,           ,         ,
#x y       ,  z        。      ,  for         ,
#z  z=100-x-y   。     ,z%3==0       ,          。