資源簡介 中小學教育資源及組卷應用平臺第10課 “韓信點兵”枚舉法的實現教材分析本課是《算法的效率》單元中的第3課。本課的教學內容是引導學生了解枚舉法解決問題的一般過程,并且實現枚舉法的程序編寫與調試。通過本課學習,學生能夠了解枚舉算法的基本原理,熟悉枚舉算法程序設計的基本思路及程序結構特點;學會使用枚舉算法解決現實生活、學習中所遇到的問題;感受枚舉法的算法執行效率。預設教學目標:1.理解枚舉法的一般過程,熟悉枚舉算法程序設計的基本思路及程序結構特點;2.實現枚舉法的程序編寫與調試;3.學會使用枚舉法解決現實生活、學習中所遇到的問題。預設教學重難點:重點:枚舉法的一般過程與算法設計難點:枚舉法的程序實現預設教學課時:1課時預設教學準備:課件、課本、學生練習學案等預設教學過程:一、課題導入1.同學們,今天我們來認識一個人:韓信。你們知道他是誰嗎?不錯,西漢開國功臣、軍事家,漢初三杰之一。韓信以勇敢、智慧和謀略著稱,他的一生留下了許多傳奇故事,其中最知名的就是“韓信點兵”。【問題描述】2.“韓信點兵”的故事秦朝末年,楚漢相爭。有一次韓信帶領1500名將士與楚王大將李峰交戰。苦戰一場,楚軍不敵,敗退回營,漢軍也死傷四五百人。他命令士兵3人一排,結果多出2名;接著命令士兵5人一排,結果多出3名;又命令士兵7人一排,結果又多出2名。韓信馬上向將士們宣布:“我軍有1073名勇士,敵人不足500,我們居高臨下,以眾擊寡,一定能打敗敵人。” 漢軍本來就信服自己的統帥,這一來更相信韓信是“神機妙算” ,于是士氣大震,一時間旌旗搖動,鼓聲喧天。漢軍步步緊逼,楚軍亂作一團,交戰不久,楚軍大敗而逃。3.教師提問,學生思考:韓信是如何知道全軍人數的,鼓勵他們分享自己的想法。4.“韓信點兵”不僅是一個歷史故事,還是一個有趣的猜數游戲。如何來解決這個問題呢?我們可以按照解決問題的四步驟來一步步解決。問題描述—抽象建模—算法設計—驗證與優化算法剛才我們看到的韓信點兵的故事就是這里的步驟1:問題描述,接下來我們就一起來進行抽象建模。二、新知建構【抽象建模】1.抽象建模是需要抓住問題的關鍵要素,忽略與問題求解無關的要素。誰來說一說韓信點兵這個問題的關鍵要素是哪些?學生回答,課件展示。2.課件出示表格對照表格和我們找出來的關鍵要素,先來看求解目標是什么?(求剩余士兵的數量)那已知條件是什么?(1500將士,死傷四五百人)由這個已知條件,我們能推斷出剩余士兵數量的范圍是什么?(1000-1100)那剩余士兵的數量關系就是:3人一排,多出2人;5人一排,多出3人;7人一排,多出2人。3. 韓信點兵的數量關系可以表示為數的除法運算。3人一排,結果多出2名:那就是剩余士兵的數量除以3,余數為2,這樣來描述同意嗎?用這個算式來表示可以嗎?這里的“□”表示什么?(剩余士兵的數量)÷3就是問題描述中的3人一排,余數為2就表示多出的2名士兵,△代表的是一共排了幾排對吧。4.3人一排多出2名可以這樣來表示,那5人一排多出3名怎么表示?誰來說?7人一排多出2人呢?(學生回答,課件出示)5.剛才說了,“□”表示的是剩余士兵的數量,也就是我們要求解的目標,可以將其設為變量x。那這三個算式就可以抽象為x÷3=△……2x÷5=○……2x÷7=◇……2x有沒有取值范圍?它的范圍是?(1000-1100)那我們可以表述為:1000<=x<=11006.通過我們的分析,對這個問題進行抽象建模,我們得出“韓信點兵”的計算模型。【算法設計】1.根據抽象與建模,我們來進一步解決問題。課件出示表格:根據模型中x的取值范圍,我們知道x的值應該從1000-1100,滿足的條件就是我們抽象出來判斷的三個條件,而且這三個條件必須同時滿足。1000滿足條件嗎?不滿足,然后判斷哪個數?不錯,下一個數是1001,讓x+1,然后再次判斷是否滿足條件,不滿足,然后繼續判斷下一個。2.看這個問題的解決方法和雞兔同籠的方法是否差不多?是的,這就是我們學過的枚舉法。3.枚舉法解決問題有兩個關鍵:一是:確定枚舉的范圍;二是正確解的判斷條件。在這題里,枚舉的范圍是?(1000<=x<=1100)正確解的判斷條件是?(“除以3余數為2,除以5余數為3,除以7余數為2” 三個條件同時滿足?)x依次取1000~1100范圍內的值,采用循環結構;判斷條件“除以3余數為2,除以5余數為3,除以7余數為2” 是否同時滿足,可以采用分支結構。4.有了這樣的分析,我們一起來完成韓信點兵枚舉算法的流程圖。任務一:完善流程圖請你操作鼠標拖動下方的5個流程圖按鈕,完善“韓信點兵”枚舉法流程圖算法。學生操作。5.反饋交流:首先x要有一個初始值:x1000然后看這個x的值是否在枚舉范圍內?:xx+1如果不在枚舉范圍內就直接結束,如果在枚舉范圍內就去判斷它是夠同時滿足這三個條件,滿足的情況下(是),那么就把滿足條件的x值輸出,不管滿不滿足都要繼續枚舉下一個值。【算法的程序實現】1.算法中的三個條件同時滿足,我們把x÷3余2稱為求余數的運算,在python中,求余數的運算符為“%”,即表達式 x%y 的功能是:“用x除以y,取它的余數”。如:5%2 的結果是 1;因為5÷2=2 …… 1,1是5÷2的余數,所以5%2=1;8%5=?8÷5=1…… 3,所以8%5=3;10%5=?2.知道了求余數的運算符“%”后,我們再來看這三個條件x÷3余2如何來表達?x%3==2x÷5余3如何來表達?7÷3余2如何來表達?3.要判斷多個條件是否同時滿足,Python中如何來表示?(and)x÷3余2,x÷5余3,x÷7余2 三個條件同時滿足就可表示為:x%3==2 and x%5==3 and x%7==24.知道了程序中的表達,那我們來按照流程圖算法完成程序實現:首先將1000賦值給變量x:x=1000當x<=1100的時候:while x<=1100:如果x÷3余2,x÷5余3,x÷7余2 三個條件同時滿足if x%3==2 and x%5==3 and x%7==2輸出x的值:print(x)枚舉下一個:x=x+15. 任務二:完善程序對照左邊的流程圖,請你拖動方框中的代碼到Python語言編寫的程序中缺失的地方,將代碼補充完整補充完整。6.反饋交流7.揭示課題今天我們通過分析,抽象建模,使用枚舉法解決了“韓信點兵”的問題。出示課題:“韓信點兵”枚舉法的實現。【綜合練習】任務三:編寫程序假如“韓信點兵”的問題描述修改為:韓信帶領1500名士兵去打仗,戰后死傷一二百人。剩下士兵中,他命令士兵3人一排,結果多出1人;5人一排,結果多出4人;7人一排,結果多出3人。問剩下的士兵一共多少人?有困難的同學選“枚舉法1” 來完成有能力的同學選“枚舉法2” 來完成反饋交流。三、課堂小結分享交流:枚舉法解決問題的方法。枚舉法是一種很常用的算法,在生活中的很多問題上都用的到。枚舉法的兩個關鍵。“韓信點兵”枚舉法兩個關鍵的呈現。【課后反思】21世紀教育網 www.21cnjy.com 精品試卷·第 2 頁 (共 2 頁)21世紀教育網(www.21cnjy.com)(共21張PPT)在楚漢之爭的過程中,韓信以其杰出的軍事才能橫掃魏、趙、代、燕、齊諸國,并數次以兵支援劉邦;垓下之戰,布五軍陣誘敵,擊破項羽軍,最終迫使項羽于漢五年(前202年)自刎于烏江。戰后,韓信因功徙封楚王。韓信韓信以勇敢、智慧和謀略著稱,他的一生留下了許多傳奇故事,其中最知名的就是“韓信點兵”。問題描述一西漢開國功臣、軍事家,漢初三杰之一。秦朝末年,楚漢相爭。有一次韓信帶領1500名將士與楚王大將李峰交戰。苦戰一場,楚軍不敵,敗退回營,漢軍也死傷四五百人。于是韓信整頓兵馬返回大本營,當行至一山坡,忽有后軍來報,說有楚軍騎兵追來。只見遠方塵土飛揚,殺身震天,漢軍本來已十分疲憊,這時隊伍喧嘩一片,韓信兵馬到坡頂,見來敵不足五百騎,便急速點兵迎敵。韓信點兵他命令士兵3人一排,結果多出2名;接著命令士兵5人一排,結果多出3名;又命令士兵7人一排,結果又多出2名。韓信馬上向將士們宣布:“我軍有1073名勇士,敵人不足500,我們居高臨下,以眾擊寡,一定能打敗敵人。” 漢軍本來就信服自己的統帥,這一來更相信韓信是“神機妙算” ,于是士氣大震,一時間旌旗搖動,鼓聲喧天。漢軍步步緊逼,楚軍亂作一團,交戰不久,楚軍大敗而逃。問題描述一韓信點兵”韓信點兵“故事是一個有趣的猜數游戲。問題描述一如何來解決這個問題呢?01問題描述02抽象與建模03設計算法04驗證與優化算法韓信點兵抓住問題的關鍵要素,忽略與問題求解無關的要素。抽象與建模二秦朝末年,楚漢相爭。有一次韓信帶領1500名將士與楚王大將李峰交戰。苦戰一場,楚軍不敵,敗退回營,漢軍也死傷四五百人。于是韓信整頓兵馬返回大本營,當行至一山坡,忽有后軍來報,說有楚軍騎兵追來。只見遠方塵土飛揚,殺身震天,漢軍本來已十分疲憊,這時隊伍喧嘩一片,韓信兵馬到坡頂,見來敵不足五百騎,便急速點兵迎敵。他命令士兵3人一排,結果多出2名;接著命令士兵5人一排,結果多出3名;又命令士兵7人一排,結果又多出2名。韓信馬上向將士們宣布:“我軍有1073名勇士,敵人不足500,我們居高臨下,以眾擊寡,一定能打敗敵人。” 漢軍本來就信服自己的統帥,這一來更相信韓信是“神機妙算” ,于是士氣大震,一時間旌旗搖動,鼓聲喧天。漢軍步步緊逼,楚軍亂作一團,交戰不久,楚軍大敗而逃。1500名將士死傷四五百人3人一排5人一排7人一排多出2名多出2名多出3名已知條件求解目標數量關系抽象與建模二1500名將士死傷四五百人3人一排,多出2人5人一排,多出3人7人一排,多出2人求剩余士兵的數量?剩余士兵數量的范圍?1000-1100韓信點兵的數量關系可以表示為數的除法運算。抽象與建模二÷ 3 =……23人一排,結果多出2名;表示什么?剩余的士兵總數3人一排多出的2名一共排了多少排韓信點兵的過程可以表示為數的除法運算。抽象與建模二÷ 3 =……23人一排,結果多出2名;5人一排,結果多出3名;÷ 5 =……37人一排,結果多出2名;÷ 7 =……3抽象與建模二指的是剩余的士兵總數這就是我們要求的量,可以將其設為變量x。x÷3= ……2x÷5= ……3x÷7= ……2x的取值范圍?1000-1100抽象與建模二x÷3= ……2x÷5= ……3x÷7= ……2x的取值范圍:1000~11001000<=x<=1100抽象與建模二x÷3= ……2x÷5= ……3x÷7= ……2(1000<=x<=1100)▲“韓信點兵”計算模型算法設計三x的值 滿足條件 是否滿足條件10001100判斷“除以3余數為2,除以5余數為3,除以7余數為2”三個條件同時滿足?判斷的條件×1001×1002×…………1073√…………1099××x+1算法設計三關鍵正確解的判斷條件確定枚舉的范圍1000<=x<=1100“除以3余數為2,除以5余數為3,除以7余數為2”三個條件同時滿足?任務一:完善流程圖請你操作鼠標拖動下方的5個流程圖按鈕,完善“韓信點兵”枚舉法流程圖算法。算法設計三請你操作鼠標拖動下方的5個流程圖按鈕,完善“韓信點兵”枚舉法流程圖算法。在枚舉范圍內嗎?X要有一個初始值判斷是否滿足條件?算法的程序實現四x÷3余2,x÷5余3,x÷7余2 三個條件同時滿足 x÷3余2取余:求余數的運算符為“%”表達式 x%y 的功能是:“用x除以y,取它的余數”如:5%2 的結果是 1;5÷2=2 …… 11是5÷2的余數8%5=8÷5=1…… 33是8÷5的余數?310%5=?10÷5=2…… 00x%3==2x%5==3x%7==2同時滿足 算法的程序實現四x÷3余2,x÷5余3,x÷7余2 三個條件同時滿足 要判斷多個條件同時滿足,需要用“and”邏輯運算符x%3==2x%5==3x%7==2同時滿足 andandx%3==2 and x%5==3 and x%7==2算法的程序實現四▲“韓信點兵”枚舉法流程圖將1000賦值給變量x當x<=1100的時候如果x÷3余2,x÷5余3,x÷7余2 三個條件同時滿足循環體縮進任務二:完善程序對照左邊的流程圖,請你拖動方框中的代碼到Python語言編寫的程序中缺失的地方,將代碼補充完整補充完整。執教者:任務三:編寫程序假如“韓信點兵”的問題描述修改為:韓信帶領1500名士兵去打仗,戰后死傷一二百人。剩下士兵中,他命令士兵3人一排,結果多出1人;5人一排,結果多出4人;7人一排,結果多出3人。問剩下的士兵一共多少人?▲有困難的同學選“枚舉法1” 來完成▲有能力的同學選“枚舉法2” 來完成枚舉法1.枚舉法的思想是 地嘗試 的解。2.枚舉法的關鍵是① 。② 。有序每一種可能確定枚舉的范圍正確解的判斷條件“韓信點兵”枚舉法確定枚舉的范圍正確解的判斷條件1000<=x<=1100x%3==2 and x%5==3 and x%7==2 展開更多...... 收起↑ 資源列表 第10課 “韓信點兵”枚舉法的實現 教學設計.docx 第10課 “韓信點兵”枚舉法的實現 課件.pptx 縮略圖、資源來源于二一教育資源庫