1.定義:枚舉法也稱為窮舉法,是利用計算機運算速度快、精確度高的特點,對要解決問題的所有可能情況,一個不漏地進行檢驗,從中找出符合要求的答案,因此枚舉法是通過犧牲時間來換取答案的全面性。因此,使用枚舉法解決問題時,需要考慮優(yōu)化算法,選擇恰當?shù)拿杜e對象,盡量分析出問題中的隱含條件,縮小枚舉范圍,以提高解決問題的效率。
2.一般結(jié)構(gòu):循環(huán)(窮舉范圍)+判斷(檢驗條件)。
例題1:請輸出所有的兩位偶數(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:輸入一個數(shù),判斷該數(shù)是否為質(zhì)數(shù)
分析:
窮舉范圍:n為素數(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不是素數(shù),當窮盡所有的i,該條件都不滿足,則n為素數(shù)
代碼如下:
n=int(input())
for i in range(2,n-1):
if n%i==0:
break
else:
print(n,是素數(shù))
例題3:請輸出所有的兩位質(zhì)數(shù)
分析:
窮舉范圍:兩位數(shù)范圍是10-99。利用range(10,100)可生成10-99的列表
判斷條件:判斷每一個n是否為素數(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,"是素數(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."是素數(shù)")
else:
print(n,“不是素數(shù)”)
例題4:這個問題,是我國古代著名趣題之一。 大約在1500年前,《孫子算經(jīng)》中就記載了這個有趣的問題。 書中是這樣敘述的:“今有雉兔同籠,上有三十五頭,下有九十四足, 問雉兔各幾何?這四句話的意思是: 有若干只雞兔同在一個籠子里,從上面數(shù),有35個頭 ?;從下面數(shù),有94只腳。求籠中各有幾只雞和兔?
分析:
窮舉范圍:兔的只數(shù)范圍為1-34,對應(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:一個三位數(shù)如果滿足該數(shù)本身=百位上的數(shù)字**3+十位數(shù)字**3+個位上的數(shù)字**3,則該數(shù)被稱為三位自冪數(shù),也叫作水仙花數(shù)。請輸出所有的水仙花數(shù)。
窮舉范圍:三位數(shù)的范圍是100-999。利用range(100,1000)可以生成該列表。
判斷條件:該數(shù)本身=百位上的數(shù)字**3+十位數(shù)字**3+個位上的數(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:輸入兩個數(shù),求出這兩個數(shù)的大公約數(shù)
窮舉范圍:大公約數(shù)可能是1-兩個數(shù)中較小的那個
判斷條件:這兩個數(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:孿生素數(shù)(質(zhì)數(shù)對)
所謂孿生素數(shù)指的是間隔為2的兩個相鄰素數(shù),因為它們之間的距離已經(jīng)近得不能再近了,如同孿生兄弟一樣,故將這一對素數(shù)稱為孿生素數(shù)。顯然,最小的一對孿生素數(shù)是(1,3)。我們可以寫出3~100以內(nèi)的孿生素數(shù),一共有8對,分別是(3,5),(5,7),(11,13),(17,19),(29,31),(41,43)(59,61)和(71,73)。隨著數(shù)字的增大,孿生素數(shù)的分布也越來越稀疏,人工尋找孿生素數(shù)變得非常困難。關(guān)于孿生素數(shù)還存在著一個著名的猜想——孿生素數(shù)猜想,即孿生素數(shù)是否有無窮多對,這是數(shù)論中還有待解決的一個重要問題。此處我們只討論在有限范圍內(nèi)的孿生素數(shù)求解問題。
問題:編程求出3~1000以內(nèi)的所有孿生素數(shù)。
分析:
在判斷孿生素數(shù)之前首先需要判斷這個數(shù)字是否為素數(shù),如果連素數(shù)都不是的話也就沒有必要再繼續(xù)去判斷了。函數(shù)定義如下:
def isprime(n):
for i in range(2,n-1):
if n%i==0:
return False
else:
return True
窮舉范圍:第一個數(shù)的范圍是2—998,另一個數(shù)的范圍則是4—1000
判斷條件:第一個數(shù)和另一個數(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,"是孿生素數(shù)")
例題9:完全數(shù)(Perfect number),又稱完美數(shù)或完備數(shù),是一些特殊的自然數(shù)。它所有的真因子(即除了自身以外的約數(shù))的和(即因子函數(shù)),恰好等于它本身。
如果一個數(shù)恰好等于它的因子之和,則稱該數(shù)為“完全數(shù)”。第一個完全數(shù)是6,第二個完全數(shù)是28,第三個完全數(shù)是496,后面的完全數(shù)還有8128、33550336等等。
編程1:輸入一個數(shù),判斷這個數(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自定義一個可以判斷該數(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海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧