1.定義:枚舉法也稱為窮舉法,是利用計(jì)算機(jī)運(yùn)算速度快、精確度高的特點(diǎn),對(duì)要解決問題的所有可能情況,一個(gè)不漏地進(jìn)行檢驗(yàn),從中找出符合要求的答案,因此枚舉法是通過犧牲時(shí)間來?yè)Q取答案的全面性。因此,使用枚舉法解決問題時(shí),需要考慮優(yōu)化算法,選擇恰當(dāng)?shù)拿杜e對(duì)象,盡量分析出問題中的隱含條件,縮小枚舉范圍,以提高解決問題的效率。
2.一般結(jié)構(gòu):循環(huán)(窮舉范圍)+判斷(檢驗(yàn)條件)。

例題1:請(qǐng)輸出所有的兩位偶數(shù)。
分析:
窮舉范圍:兩位數(shù)范圍是10-99。利用range(10,100)可生成10-99的列表
判斷條件:偶數(shù)滿足除以二的余數(shù)為0。i%2==0? 此條件滿足則i為偶數(shù)
代碼如下:
for i in range(10,100):
    if i%2==0:
        print(i)例題2:輸入一個(gè)數(shù),判斷該數(shù)是否為質(zhì)數(shù)
分析:
窮舉范圍:n為素?cái)?shù),需要滿足n%2!=0,n%3!=0 ... n%n-1!=0,n的除數(shù)范圍應(yīng)該為2-n-1。
判斷條件:n%i==0 則代表i是n的因數(shù),n不是素?cái)?shù),當(dāng)窮盡所有的i,該條件都不滿足,則n為素?cái)?shù)
代碼如下:
n=int(input())
for i in range(2,n-1):
    if n%i==0:
        break
else:
    print(n,是素?cái)?shù))例題3:請(qǐng)輸出所有的兩位質(zhì)數(shù)
分析:
窮舉范圍:兩位數(shù)范圍是10-99。利用range(10,100)可生成10-99的列表
判斷條件:判斷每一個(gè)n是否為素?cái)?shù),利用例題2中相關(guān)代碼
代碼如下:
for n in range(10,100):
    for i in range(2,n-1):
        if n%i==0:
            break
    else:
        print(n,"是素?cái)?shù)")另一種做法:
t=0
for n in range(10,100):
    for i in range(2,int(2,int(n**0.5)+1)):
        if n%i==0:
            t=1
            break
if t==1:
    print(n."是素?cái)?shù)")
else:
    print(n,“不是素?cái)?shù)”)例題4:這個(gè)問題,是我國(guó)古代著名趣題之一。 大約在1500年前,《孫子算經(jīng)》中就記載了這個(gè)有趣的問題。 書中是這樣敘述的:“今有雉兔同籠,上有三十五頭,下有九十四足, 問雉兔各幾何?這四句話的意思是: 有若干只雞兔同在一個(gè)籠子里,從上面數(shù),有35個(gè)頭 ?;從下面數(shù),有94只腳。求籠中各有幾只雞和兔?
分析:
窮舉范圍:兔的只數(shù)范圍為1-34,對(duì)應(yīng)的雞的只數(shù)為34-1
判斷條件:根據(jù)每組可能解判斷兔的只數(shù)*4+雞的只數(shù)*2==94是否成立,如果成立,則代表這組可能解成立
代碼如下:
for tu in range(1,34):
    ji=34-tu
    if tu*4+ji*2==94:
        print(“兔的只數(shù)為”,tu,“雞的只數(shù)為”,ji)例題5:一個(gè)三位數(shù)如果滿足該數(shù)本身=百位上的數(shù)字**3+十位數(shù)字**3+個(gè)位上的數(shù)字**3,則該數(shù)被稱為三位自冪數(shù),也叫作水仙花數(shù)。請(qǐng)輸出所有的水仙花數(shù)。
窮舉范圍:三位數(shù)的范圍是100-999。利用range(100,1000)可以生成該列表。
判斷條件:該數(shù)本身=百位上的數(shù)字**3+十位數(shù)字**3+個(gè)位上的數(shù)字**3
代碼如下:
for i in range(100,1000):
    bai=i//100
    shi=i//10%10
    ge=i%10
    if bai**3+shi**3+ge**3==i:
        print(i,“是水仙花數(shù)”)例題6:公雞5元一只,母雞3元一只,小雞3只一元, 用100元買一百只雞。其中公雞,母雞,小雞都必須要有。問公雞,母雞,小雞要買多少只剛好湊足100元
窮舉范圍:公雞只數(shù)范圍是1-20,母雞只數(shù)1-33,小雞只數(shù)1-300
判斷條件:公雞只數(shù)+母雞只數(shù)+小雞只數(shù)==100? 且? 公雞的錢數(shù)+母雞的錢數(shù)+小雞的錢數(shù)==100
代碼如下:
for cock_num in range(1,21):          #公雞只數(shù)可能為1-20
    for hen_num in range(1,34):       #母雞只數(shù)可能為1-33
        for chick_num in range(1,101): #(3小雞)只數(shù)可能為1-100
            money1=cock_num*cock_price+hen_num*hen_price+chick_num*threechick_price
            num1=cock_num+hen_num+chick_num*3
            if money1==100 and num1==100:
                print (cock_num,hen_num,chick_num*3) #(③小雞數(shù))例題7:輸入兩個(gè)數(shù),求出這兩個(gè)數(shù)的大公約數(shù)
窮舉范圍:大公約數(shù)可能是1-兩個(gè)數(shù)中較小的那個(gè)
判斷條件:這兩個(gè)數(shù)除以大公約數(shù)的余數(shù)都為0
代碼如下:
m=int(input())
n=int(input())
for i in range(min(m,n),0,-1):
    if m%i==0 and n%i==0:
        print(m,"和",n,"的大公約數(shù)是",i)例題8:孿生素?cái)?shù)(質(zhì)數(shù)對(duì))
所謂孿生素?cái)?shù)指的是間隔為2的兩個(gè)相鄰素?cái)?shù),因?yàn)樗鼈冎g的距離已經(jīng)近得不能再近了,如同孿生兄弟一樣,故將這一對(duì)素?cái)?shù)稱為孿生素?cái)?shù)。顯然,最小的一對(duì)孿生素?cái)?shù)是(1,3)。我們可以寫出3~100以內(nèi)的孿生素?cái)?shù),一共有8對(duì),分別是(3,5),(5,7),(11,13),(17,19),(29,31),(41,43)(59,61)和(71,73)。隨著數(shù)字的增大,孿生素?cái)?shù)的分布也越來越稀疏,人工尋找孿生素?cái)?shù)變得非常困難。關(guān)于孿生素?cái)?shù)還存在著一個(gè)著名的猜想——孿生素?cái)?shù)猜想,即孿生素?cái)?shù)是否有無窮多對(duì),這是數(shù)論中還有待解決的一個(gè)重要問題。此處我們只討論在有限范圍內(nèi)的孿生素?cái)?shù)求解問題。
問題:編程求出3~1000以內(nèi)的所有孿生素?cái)?shù)。
分析:
在判斷孿生素?cái)?shù)之前首先需要判斷這個(gè)數(shù)字是否為素?cái)?shù),如果連素?cái)?shù)都不是的話也就沒有必要再繼續(xù)去判斷了。函數(shù)定義如下:
def isprime(n):
    for i in range(2,n-1):
        if n%i==0:
            return False
    else:
        return True窮舉范圍:第一個(gè)數(shù)的范圍是2—998,另一個(gè)數(shù)的范圍則是4—1000
判斷條件:第一個(gè)數(shù)和另一個(gè)數(shù)調(diào)用isprime()函數(shù)的返回值均為True
def isprime(n):
    for i in range(2,n-1):
        if n%i==0:
            return False
    else:
        return True
#主程序
for i in range(2,999):
    if isprime(i) and isprime(i+2):
        print(i,"和",i+2,"是孿生素?cái)?shù)")例題9:完全數(shù)(Perfect number),又稱完美數(shù)或完備數(shù),是一些特殊的自然數(shù)。它所有的真因子(即除了自身以外的約數(shù))的和(即因子函數(shù)),恰好等于它本身。
如果一個(gè)數(shù)恰好等于它的因子之和,則稱該數(shù)為“完全數(shù)”。第一個(gè)完全數(shù)是6,第二個(gè)完全數(shù)是28,第三個(gè)完全數(shù)是496,后面的完全數(shù)還有8128、33550336等等。
編程1:輸入一個(gè)數(shù),判斷這個(gè)數(shù)是否是完數(shù)。
分析:
利用for循環(huán)找到該數(shù)的所有因子,求出因子之和。若因子和與該數(shù)相等則該數(shù)為完數(shù)。
n=int(input())
s=0
for i in range(2,n):
    if n%i==0:
        s=s+i
if s==n:
    print(n,"是完數(shù)")編程2:輸出1-1000以內(nèi)所有的完數(shù)
分析:
利用編程1自定義一個(gè)可以判斷該數(shù)是否為完數(shù)的函數(shù)
窮舉范圍:1-1000
判斷條件:該數(shù)為完數(shù),則輸出
def ws(n):
    s=1
    for i in range(2,n):
        if n%i==0:
            s=s+i
    if s==n:
        return True
#主程序
for i in range(1,1001):
    if ws(i):   
        print(i)你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧
                當(dāng)前標(biāo)題:python算法一:枚舉法-創(chuàng)新互聯(lián)
                
                瀏覽地址:http://www.chinadenli.net/article24/dcscce.html
            
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信小程序、自適應(yīng)網(wǎng)站、企業(yè)建站、網(wǎng)站設(shè)計(jì)公司、靜態(tài)網(wǎng)站、手機(jī)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
