資源簡介 第2節 枚舉算法考試內容考試要求枚舉算法思想c枚舉算法程序實現c一、枚舉算法思想1.什么是枚舉算法根據問題的本身特點,一一列舉出該問題的所有可能情況,并對可能情況進行逐一分析、判斷是否滿足條件,若滿足,則它是問題的一個正確解,從而挑選出符合條件的所有解。2.枚舉算法的特征枚舉對象:枚舉什么枚舉范圍:連續的區間條件判斷:滿足什么條件二、利用枚舉算法解決問題的基本思路(1)分析枚舉對象分析題意,確定要枚舉什么。(2)確定枚舉范圍枚舉對象的范圍要準確,不能擴大和縮小范圍。(3)得出判斷條件判斷條件要書寫規范,符合VB規則。三、枚舉算法算法框架及程序實現1.算法框架循環結構語句嵌套分支結構(分支結構也稱選擇結構)語句。循環語句用來列舉可能解的范圍。選擇語句用來判斷所列舉的可能解的正確性。2.枚舉算法解題時需注意的方面(1)枚舉解時,既不能遺漏任何一個真正解,也不能有重復。(2)條件判斷時,利用問題提供的約束條件篩選、判斷解的正確性。(3)求解形式一般為輸出解的內容或進行與解相關的其他計算。一、枚舉算法思想理解枚舉算法的基本思想,掌握枚舉算法的適用場合。【典例1】 下列問題中適合采用枚舉算法解決的是( )A.求三個數中的最大數B.統計1000以內能被7整除但不能被3整除的自然數的個數C.計算1~100的和D.將一個十進制數轉換為二進制數解析 本題主要考查枚舉算法的基本思想。顯然,只有B選項符合枚舉算法的基本思想,枚舉對象為自然數,枚舉范圍為1~1000,枚舉條件為:i mod 7=0 and i mod 3< >0,因此答案為B。答案 B【變式訓練】 下列問題中適合采用枚舉算法解決的是( )A.求解一元二次方程的根B.根據三角形三邊長度,求三角形的面積C.求100內所有素數D.求三個數中的最大數解析 本題主要考查枚舉算法的基本思想。C選項符合枚舉算法的基本思想,枚舉對象為自然數,枚舉范圍為2~1000,枚舉條件為“該數是素數”,因此答案為C。答案 C【方法總結】 理解枚舉算法的基本思想,從而掌握枚舉的適用場合。二、枚舉算法實例應用【典例2】 某QQ群采用問題驗證的加入方式,如圖1所示。圖1某同學設計了一個VB程序用于尋找這個以511開頭、可被2015整除的6位數,單擊計算按鈕Command1,在標簽Label2上顯示答案,設計的窗體界面如圖2所示。圖2(1)在圖2所示的窗體中,創建標簽Label2對象的方法正確的是________(填字母)。A.雙擊工具箱中的“”控件B.雙擊工具箱中的“”控件(2)要在窗體的標題欄上顯示 “問題驗證” 字樣,是通過修改該窗體對象的 ________(填:Font / Caption / Text)屬性值實現的。 (3)在代碼編輯窗口中,輸入“Label2.”后出現如圖3所示的信息, 其中的“Autosize”是Label2的________(填:事件名 / 方法名 / 屬性名)。圖3(4)為了實現上述功能,在程序劃線處填入正確的語句。Private Sub Command1_Click() Dim i As Integer, n As Long For i = 0 To 999________________________If n Mod 2015 = 0 Then Label2.Caption = Str(n) Next iEnd Sub解析 本題考查的是枚舉算法思想以及程序的實現。此程序枚舉的是6位數中的后3位,因此6位數為n=511000+i。答案 (1)B (2)Caption (3)屬性名 (4)n=511000+i【變式訓練1】 下列程序的功能是:在文本框Text1中輸入一個正整數N(N>2),若該整數為質數(即素數),則在標簽Label3中顯示“IS Prime!”,否則顯示“IS not Prime!”。程序運行時,在文本框Text1中輸入一個整數,單擊“判斷”按鈕Command1,在標簽Label3中顯示結果。程序運行界面如下圖所示。實現上述功能的VB程序如下,請回答下列問題:Private Sub Command1_Click() Dim n As Long, i As Integer, flag As Boolean n = Val(Text1.Text) ________①______ flag = True Do While ________②______If n Mod i = 0 Then flag = FalseElse i = i + 1End If Loop If flag Then Label3.Caption = “IS Prime!” Else Label3.Caption = “IS not Prime!”End Sub(1)觀察程序運行界面,該圖中共包含對象________個,分別屬于________個類(填個數)。(2)程序代碼“Private Sub Command1_Click()”中的Command1是指________,Click是指________。(3)在程序劃線處填入合適的代碼。解析 (1)本題主要考查的是VB對象及VB控件類名。圖中共包含1個窗體、3個標簽、1個文本框、1個按鈕對象,共6個對象,分屬于標簽類、按鈕類、文本框類和窗體類。(2)本題主要考查的是事件處理過程。事件處理過程“Private Sub Command1_Click()”中的Command1是指對象名,Click是指事件名。(3)程序劃線①處為i初值,從質數的定義可知i=2;②處為循環條件,表示整數n還未判斷完畢且當前還不是質數,因此②處語句為i <= n - 1 And flag = True或i<=Int(Sqr(n)) And flag=True。答案 (1)6 4 (2)對象名 事件名(3)①i = 2 ②i <= n - 1 And flag = True 或i <=Int(Sqr(n)) And flag = True,說明flag = True可寫為flag【變式訓練2】 有一個七位數,形如6600**0,頭兩位均為6,其中十位和百位已模糊不清,且該數是64或24的倍數,求該整數的所有可能情況,并統計符合條件的整數個數。實現上述功能的VB程序如下,請回答下列問題:Private Sub Command1_Click() Dim i As Long, x As Long, count As Integer count = 0 For i = 10 To 99 x = ________①______ If __________②________Then List1.AddItem Str(x) count = count + 1 End If Next i List1.AddItem Str(count)End Sub(1)程序代碼“List1.AddItem x”中的AddItem是指List1對象的________(填:屬性/方法/事件)。(2)在程序劃線處填入合適的代碼。解析 (1)本題主要考查的是對象的方法。AddItem是指List1對象的方法。(2)變量x表示七位數整數,枚舉兩位模糊的整數i,因此x=6600000 + i * 10;該數是64或24的倍數,用VB表達式表示為x Mod 64 = 0 Or x Mod 24 = 0。答案 (1)方法 (2)①6600000 + i * 10②x Mod 64 = 0 Or x Mod 24 = 0【方法總結】 (1)要注意枚舉范圍的精確性,不能擴大和縮小,否則會影響結果。(2)條件表達式書寫要規范,注意與數學代數式的區別。1.有如下程序段:Dim i As Integer, ans As IntegerDim a(1 To 10) As Integersum = 0For i = 1 To 10 a(i) = i ^2 If a(i) Mod 3 = 0 Then ans = ans + a(i)Next iText1.Text = Str(ans)該程序段運行后,文本框Text1中顯示的內容是( )A.55 B.126 C.259 D.385解析 本題的本質是求1~10的平方數中3的倍數之和。本題采用枚舉算法思想,枚舉范圍為1~10,枚舉對象為a(i)(即i的平方數),條件為“a(i)是3的倍數嗎?”,當i=3、6、9時,a(3)=9、a(6)=36、a(9)=81滿足條件,因此ans=9+36+81=126,答案為B。答案 B2.水仙花數。所謂水仙花數是指一個三位整數,每一位上數字的立方和等于該數本身,這樣的數稱為水仙花數。程序運行時,單擊“求解”按鈕,則在列表框List1中輸出所有的水仙花數,并在列表框最后顯示水仙花數的數量。程序運行效果如下圖所示。實現上述功能的VB程序如下,請回答下列問題:Private Sub Comm1_Click() Dim i As Integer, a As Integer, b As Integer, c As Integer Dim s As Integer, count As Integer count = 0 For i = 100 To 999______①______b = i 10 Mod 10c = i 100s = a ^ 3 + b ^ 3 + c ^ 3If s = i Then List1.AddItem Str(i) count = count + 1End If Next i List1.AddItem “共有水仙花數:” +____②____+ “個”End Sub(1)“求解”按鈕的名稱為________。(2)在程序劃線處填入合適的代碼。解析 (1)本題主要考查的是對象的名稱,根據代碼“rivate Sub Comm1_Click()”可知,“求解”按鈕的名稱為Comm1。(2)根據代碼“s = a ^ 3 + b ^ 3 + c ^ 3”可知,①處為關于變量a的賦值語句,變量存儲整數i的個位,因此為a = i Mod 10;變量count存儲水仙花數的個數,最后在列表框List中輸出,需注意的是要加Str函數。答案 (1)Comm1 (2)①a = i Mod 10 ②Str(count)基礎鞏固1.有如下VB程序段:For i = 1 To 30 If i Mod 2 = 0 And i Mod 3 = 0 Thens = s + iList1.AddItem Str(i) End IfNext i該程序段執行后,變量s的值為________。解析 本程序的功能是統計30以內6的倍數之和。顯然,s=6+12+18+24+30=90。答案 902.編寫VB程序,實現如下功能:有一個五位數,此五位數的萬位和個位上的數字分別是2和5,而且這個五位數是一個完全平方數。現要找出符合上列要求的所有五位數,并統計共有幾個數。單擊“尋找”按鈕Command1,將符合要求的五位數顯示在列表框List1中,統計個數顯示在標簽Label2中。界面如下圖所示。(1)在設計應用程序界面時,要使按鈕Command1上顯示“尋找”,則應修改其________屬性的屬性值。(2)為實現上述功能,請在劃線處填入合適的代碼。Private Sub Command1_Click() Dim i As Integer, x As Integer, n As Integer For i = 0 To 999 ______①______ If Int(Sqr(x)) = Sqr(x) Then List1.AddItem Str(x) ______②______ End If Next i Label2.Caption = “共有:” + Str(n) + “個”End Sub解析 (1)本題主要考查的是對象的屬性。(2)變量x表示五位數,因此①處代碼為x=20005+i*10;②處表示統計滿足條件的五位數個數,因此為n=n+1。答案 (1)Caption (2)①x=20005+i*10②n=n+1能力提升3.現有一堆蘋果需要裝盒銷售,現有大小兩種規格的盒子,小盒每盒可裝10個蘋果,大盒每盒可裝15個蘋果。蘋果裝盒的要求如下:要求大小盒子都要使用(至少使用1個),且每盒都必須裝滿,計算出所有的裝盒方案,并統計出方案數。小明編寫了一個蘋果裝盒的VB程序,程序運行時,在文本框Text1中輸入蘋果總數,單擊“計算”按鈕,如有方案,則在列表框List1中顯示具體的裝盒的方案,在標簽Label4中顯示方案總數,否則在列表框List1中顯示“無方案”。程序運行界面如圖所示。實現上述功能的VB程序如下,但程序加框處語句有錯,請改正。Private Sub Command1_Click() Dim i As Long, j As Long, count As Long, n As Long count = 0 n = Val(Text1.Text) List1.Clear For i = 1 To n 10 For j = 1 To n 15If Then ′① count = count + 1 List1.AddItem “方案” + Str(count) + “:” +Str(i) + “ ” + Str(j)End If Next j Next i If Then ′②Label4.Caption = Str(count) ElseList1.AddItem “沒有方案!” End IfEnd Sub程序中加框①處應改正為__________________________________________;加框②處應改正為_________________________________________________。解析 本題主要考查的是枚舉算法。①處語句主要考查表達式書寫的規范性,特別要注意乘號不能省略,①處語句應改為:i * 10 + j * 15 = n 或i * 10 + j * 15 =Val(Text1.Text);根據Then后面的語句可知,②處條件為有方案的情況,因此②處語句應修改為count>0或count< >0。答案 ①i * 10 + j * 15 = n 或i * 10 + j * 15 =Val(Text1.Text)②count>0或count< >0 4.下列VB 程序用于刪除數據序列中的重復數據(即相同的數據僅保留一個)。程序運行時,在列表框 List1 中顯示數組 a 中的原始數據,單擊“去重”按鈕 Command1,在列表框 List2 中輸出“去重”后的數據,同時在標簽 Label3 中顯示刪除的數據總個數。程序運行的界面如下圖所示:程序代碼如下,將空白處補充完整。Const maxn = 10Dim a(1 To maxn) As IntegerPrivate Sub Command1_Click()Dim i As Integer, c As IntegerDim flag(1 To maxn) As Booleanc = 0For i = 1 To maxnflag(i) = False Next iFor i = 1 To maxnIf flag(i) = False Then For j = i + 1 To maxn If____①____Then flag(j) = True:c=c+1 Next jEnd IfNext iFor i = 1 To maxnIf____②____Then List2.AddItem Str(a(i)) ′Next iLabel3.Caption = “共刪除重復數據:” & Str(c) & “個”End Sub解析 變量flag(i)表示是否有重復,如果有重復,值為True。判斷a(i)是否有重復的思路是j從i的下一個位置開始,a(i)與a(j)比較,如果相等,表示與他重復,打上標記,讓flag(j)成為True。 最后根據flag 的值輸出不重復的數。 答案 ①a(i)= a(j) ②flag(i) = False課件22張PPT。第2節 枚舉算法一、枚舉算法思想1.什么是枚舉算法根據問題的本身特點,一一列舉出該問題的所有可能情況,并對可能情況進行逐一分析、判斷是否滿足條件,若滿足,則它是問題的一個正確解,從而挑選出符合條件的所有解。2.枚舉算法的特征枚舉對象:枚舉什么枚舉范圍:連續的區間條件判斷:滿足什么條件二、利用枚舉算法解決問題的基本思路(1)分析枚舉對象分析題意,確定要枚舉什么。(2)確定枚舉范圍枚舉對象的范圍要準確,不能擴大和縮小范圍。(3)得出判斷條件判斷條件要書寫規范,符合VB規則。三、枚舉算法算法框架及程序實現1.算法框架循環結構語句嵌套分支結構(分支結構也稱選擇結構)語句。循環語句用來列舉可能解的范圍。選擇語句用來判斷所列舉的可能解的正確性。2.枚舉算法解題時需注意的方面(1)枚舉解時,既不能遺漏任何一個真正解,也不能有重復。(2)條件判斷時,利用問題提供的約束條件篩選、判斷解的正確性。(3)求解形式一般為輸出解的內容或進行與解相關的其他計算。一、枚舉算法思想理解枚舉算法的基本思想,掌握枚舉算法的適用場合。【典例1】 下列問題中適合采用枚舉算法解決的是( )A.求三個數中的最大數B.統計1000以內能被7整除但不能被3整除的自然數的個數C.計算1~100的和D.將一個十進制數轉換為二進制數解析 本題主要考查枚舉算法的基本思想。顯然,只有B選項符合枚舉算法的基本思想,枚舉對象為自然數,枚舉范圍為1~1000,枚舉條件為:i mod 7=0 and i mod 3< >0,因此答案為B。答案 B【變式訓練】 下列問題中適合采用枚舉算法解決的是( )A.求解一元二次方程的根B.根據三角形三邊長度,求三角形的面積C.求100內所有素數D.求三個數中的最大數解析 本題主要考查枚舉算法的基本思想。C選項符合枚舉算法的基本思想,枚舉對象為自然數,枚舉范圍為2~1000,枚舉條件為“該數是素數”,因此答案為C。答案 C【方法總結】 理解枚舉算法的基本思想,從而掌握枚舉的適用場合。二、枚舉算法實例應用【典例2】 某QQ群采用問題驗證的加入方式,如圖1所示。圖1某同學設計了一個VB程序用于尋找這個以511開頭、可被2015整除的6位數,單擊計算按鈕Command1,在標簽Label2上顯示答案,設計的窗體界面如圖2所示。圖2(1)在圖2所示的窗體中,創建標簽Label2對象的方法正確的是________(填字母)。(2)要在窗體的標題欄上顯示 “問題驗證” 字樣,是通過修改該窗體對象的 ________(填:Font / Caption / Text)屬性值實現的。 (3)在代碼編輯窗口中,輸入“Label2.”后出現如圖3所示的信息, 其中的“Autosize”是Label2的________(填:事件名 / 方法名 / 屬性名)。圖3(4)為了實現上述功能,在程序劃線處填入正確的語句。Private Sub Command1_Click() Dim i As Integer, n As Long For i = 0 To 999________________________If n Mod 2015 = 0 Then Label2.Caption = Str(n) Next iEnd Sub解析 本題考查的是枚舉算法思想以及程序的實現。此程序枚舉的是6位數中的后3位,因此6位數為n=511000+i。答案 (1)B (2)Caption (3)屬性名 (4)n=511000+i【變式訓練1】 下列程序的功能是:在文本框Text1中輸入一個正整數N(N>2),若該整數為質數(即素數),則在標簽Label3中顯示“IS Prime!”,否則顯示“IS not Prime!”。 程序運行時,在文本框Text1中輸入一個整數,單擊“判斷”按鈕Command1,在標簽Label3中顯示結果。程序運行界面如下圖所示。實現上述功能的VB程序如下,請回答下列問題:Private Sub Command1_Click() Dim n As Long, i As Integer, flag As Boolean n = Val(Text1.Text) ________①______ flag = True Do While ________②______ If n Mod i = 0 Then flag = False Else i = i + 1 End If Loop If flag Then Label3.Caption = “IS Prime!” Else Label3.Caption = “IS not Prime!”End Sub(1)觀察程序運行界面,該圖中共包含對象________個,分別屬于________個類(填個數)。(2)程序代碼“Private Sub Command1_Click()”中的Command1是指________,Click是指________。(3)在程序劃線處填入合適的代碼。解析 (1)本題主要考查的是VB對象及VB控件類名。圖中共包含1個窗體、3個標簽、1個文本框、1個按鈕對象,共6個對象,分屬于標簽類、按鈕類、文本框類和窗體類。(2)本題主要考查的是事件處理過程。事件處理過程“Private Sub Command1_Click()”中的Command1是指對象名,Click是指事件名。(3)程序劃線①處為i初值,從質數的定義可知i=2;②處為循環條件,表示整數n還未判斷完畢且當前還不是質數,因此②處語句為i <= n - 1 And flag = True或i<=Int(Sqr(n)) And flag=True。答案 (1)6 4 (2)對象名 事件名(3)①i = 2 ②i <= n - 1 And flag = True 或i <=Int(Sqr(n)) And flag = True,說明flag = True可寫為flag【變式訓練2】 有一個七位數,形如6600**0,頭兩位均為6,其中十位和百位已模糊不清,且該數是64或24的倍數,求該整數的所有可能情況,并統計符合條件的整數個數。實現上述功能的VB程序如下,請回答下列問題:Private Sub Command1_Click() Dim i As Long, x As Long, count As Integer count = 0 For i = 10 To 99 x = ________①______ If __________②________Then List1.AddItem Str(x) count = count + 1 End If Next i List1.AddItem Str(count)End Sub(1)程序代碼“List1.AddItem x”中的AddItem是指List1對象的________(填:屬性/方法/事件)。(2)在程序劃線處填入合適的代碼。解析 (1)本題主要考查的是對象的方法。AddItem是指List1對象的方法。(2)變量x表示七位數整數,枚舉兩位模糊的整數i,因此x=6600000 + i * 10;該數是64或24的倍數,用VB表達式表示為x Mod 64 = 0 Or x Mod 24 = 0。答案 (1)方法 (2)①6600000 + i * 10 ②x Mod 64 = 0 Or x Mod 24 = 0【方法總結】 (1)要注意枚舉范圍的精確性,不能擴大和縮小,否則會影響結果。(2)條件表達式書寫要規范,注意與數學代數式的區別。 展開更多...... 收起↑ 資源列表 第2節 枚舉算法.doc 第四單元第2節 枚舉算法.pptx 縮略圖、資源來源于二一教育資源庫