20230130數理解題營
主題:Scratch數理解題營
時間:2023.01.30(一)~02.01(三) 13:00~17:00
地點:新上國小三樓電腦教室一
解題內容:
一、求BMI值及判斷是否過輕、正常或肥胖?
二、猜數字遊戲
三、九九乘法表
四、求水仙花數
五、求一個數N是否為質數
六、求一個數N的所有因數
七、判斷某一年是否為閏年
八、求一數值所有位數的和?
九、模擬樂透開獎
十、求兩數的最大公因數及最小公倍數?
零、認識Scratch
Scratch官網:https://scratch.mit.edu/
Scratch 是全球最大的兒童編程社群,也是一種擁有簡潔編輯環境的編程語言,你可以用它編寫故事、動畫與遊戲。Scratch 由非營利組織 Scratch 基金會 設計、開發與維護。
Scratch 促進了兒童的運算思維、解決問題能力;創意的教與學;自我表達與合作;和計算機領域的平等。
Scratch 是免費的,支持超過 70 種語言。
註冊
如果沒有官網帳號的,請到官網註冊(加入Scratch)
一開始只是New Scratcher,無法創建【創作坊】
Scratch除了可以設計遊戲及動畫外(全國貓咪盃競賽),還可以進行數理解題!這部份才真正使用到運算思維的技巧!
20210423全國貓咪盃競賽(花蓮) https://youtube.com/playlist?list=PLSyAyzqfKi-M5U6sWK2WCb4HmNOjE7kfJ
一、求BMI值及判斷是否過輕、正常或肥胖?
BMI值就是身體質量指數,BMI=體重(公斤)/ (身高*身高)(公尺)
認識【運算思維】(Computational Thinking)是最近很熱門的一個名詞
根據Google的定義,運算思維包含有資料蒐集、資料分析、資料表示、拆解、找相似、模擬、抽象化、自動化、平行化、演算法設計等內涵。一般常整合(簡化)成以下四項重點:
拆解 (Decomposition):將一個任務或問題拆解成數個步驟或部分或小問題。(班上的長,都是老師拆解班級、方便管理的作法)
找出規律(Pattern Recognition):尋找問題中的相同或相似之處。也可利用規律性來拆解問題!
歸納與抽象化 (Pattern Generalization and Abstraction):只專注於重要的信息,忽視無關緊要的細節,找出最主要導致此模式的原則或因素。
演算法設計(Algorithm Design):開發解決這問題的步驟、規則。
請同學想一想,這要如何解這一題目?
程序:輸入-> 黑盒子 ->輸出結果
輸入:
輸入積木
變數
輸出:
輸出積木
也有人利用變數或清單來做輸出
黑盒子:運算思維的演算法設計,也就是解題關鍵的地方!!
簡單程式如下:
計算BMI值
判斷是否過輕、正常或肥胖?
二、猜數字遊戲
跟電腦比賽猜數字遊戲,
電腦會隨機出一個1~100的數字給玩家猜
若輸入數太小,就顯示出"太小了";反之如果輸入數太大,就顯示出"太大了"
玩家最後找出正確的數字來,並顯示一共猜了幾次
請同學想一想,這要如何解這一題目?
先建立2個變數來儲存【電腦的值】及【你猜的值】
程序:一直【輸入-> 判斷 ->輸出結果】
方法一:
同學在猜數字時,可以採用二分搜尋法來猜數字!電腦科學中,二分搜尋演算法(英語:binary search algorithm),也稱折半搜尋演算法(英語:half-interval search algorithm)[1]、對數搜尋演算法(英語:logarithmic search algorithm)[2],是一種在有序陣列中搜尋某一特定元素的搜尋演算法。搜尋過程從陣列的中間元素開始,如果中間元素正好是要搜尋的元素,則搜尋過程結束;如果某一特定元素大於或者小於中間元素,則在陣列大於或小於中間元素的那一半中搜尋,而且跟開始一樣從中間元素開始比較。如果在某一步驟陣列為空,則代表找不到。這種搜尋演算法每一次比較都使搜尋範圍縮小一半。所以先猜1~100的一半是50,接下來75或25....
小試身手一下
這題目是【111年高雄市貓咪杯Scratch 數理邀請賽試題】第1題
可以與旁邊同學相互討論
請寫出一個程式能夠印出 a 和 b 區間裡的奇數和(不包括 a 和 b ),程式執行後可以輸入兩個數: a 和 b,b>a, 且 1<a<101, 1<b<101
輸入範例一: 1 10、輸出範例一: 24
輸入範例二: 11 25、輸出範例二: 108
三、九九乘法表
九九乘法表是寫程式最常做的題目
認識【巢狀迴圈】
巢狀迴圈就是有兩個以上迴圈所組合而成,也就是迴圈內有迴圈,我們稱在外面的迴圈為「外迴圈」,被包在裡面的迴圈,稱為「內迴圈」
巢狀迴圈程式執行過程:外迴圈執行1次,內迴圈執行全部次數,所以可以把外迴圈看做是時鐘的分針,內迴圈就是秒針,當內層迴圈執行一輪之後,外層迴圈才會進到下一項。
說實在的SCRATCH的積木並不好用,如果有像下面的積木就更方便了
認識【清單】的使用
「清單(有些稱【陣列】」與「變數」的關係,清單可以說是變數的延伸,將同性質的變數可整合成一個清單,例如計算學生各科成績時,我們可以用如下兩種表示法來計算。清單的索引數字從【1】項目開始!
四、求水仙花數
「水仙花數」是指一個三位數,各位數的立方和等於它本身的值。例如:153是一個「水仙花數」,因為153=1x1x1+5x5x5+3x3x3
使用【暴力法】解題,也就是從100開始看符不符合?一直嘗試到999,這就是暴力法解題!
方法一:https://scratch.mit.edu/projects/792208174
設三個變數分別為百位數(i)、十位數(j)及個位數(k),再來組出所有的三位數,並判斷是否符合水仙花數!
方法二:https://scratch.mit.edu/projects/792213390
設一個變數從100跑到999,但先算出這個數百位數、十位數及個位數,並判斷是否符合水仙花數!
先想想,如何從3位數的數值中如何求得百位數、大位數及個位數的值?例如:如何從123中計算出百位為1、十位數為2、個位數為3
123/10=12....3 (餘數)
12/10=1....2(餘數)
1/10=0....1 (餘數)
五、求一個數N是否為質數
這題目是【111年高雄市貓咪杯Scratch 數理邀請賽試題】第3題
何為【質數】
所謂質數是正整數,即大於1的自然數,該數除1和該數自身之外不能被任何自然數整除的數,如2、3、5、7、11...等。)
解題說明:
這題解法我們也是使用【暴力法】解題,看這數能不能整除2、3、4...,如果能整除,就代表它不是質數!
小試身手一下
這題目是【111年高雄市貓咪杯Scratch 數理邀請賽試題】第4題
可以與旁邊同學相互討論
請寫出一個程式能夠印出 a 和 b 區間裡的質數(不包括 a 和 b ),程式執行後可以輸入兩個數: a 和 b,b>a, 且 1<a<51, 1<b<101
輸入範例一: 5 20 ;輸出範例一: 7 11 13 17 19
輸入範例二: 13 50;輸出範例二: 17 19 23 29 31 37 41 43 47
函數的使用
六、求一個數N的所有因數
何謂【因數】
整數m除以n,結果是無餘數的整數,也就是【整除】,那麼我們稱n就是m的因數。1為任何數的因數。
解題說明:
這題解法跟上面求質數相同,看這數能不能整除1、2、3、4...,如果能整除,就代表1、2、3、4這些數是這數N的因數!
小試身手一下
這題目是【111年高雄市貓咪杯Scratch 數理邀請賽試題】第5題
可以與旁邊同學相互討論
請寫出一個程式輸入 N,2<N<200 ,先判斷這一個數是不是合數如果是合數請算出它的質因數有哪些?
輸入範例一: 60;輸出範例一: 60 是合數, 它的質因數有: 2 3 5
輸入範例二:11 ;輸出範例二:11 不是合數
說明:
在數論中,合數(也稱為合成數)是除了1和其本身外具有其他正因數的正整數。依照定義,每一個大於1的整數若不是質數,就會是合數。而1則被認為不是質數,也不是合數。
七、判斷某一年是否為閏年
閏年的判斷?
閏年為2月有29日,整年有 366 天
西元的年數可以被4整除為閏年,但是有例外,被100整除而不能被400整除的不是閏年
如西元1600年、2000年是閏年,而西元1700年、3000年不是。
方法一:https://scratch.mit.edu/projects/792594641
若該年份可以被 4 整除,請執行步驟 2,否則請執行步驟 5(不是閏年)。
若該年份可以被 100 整除,請執行步驟 3,否則請執行步驟 4(是閏年)。
若該年份可以被 400 整除,請執行步驟 4,否則請執行步驟 5(不是閏年)。
該年份為閏年 (有 366 天)。
該年份不是閏年 (有 365 天)
方法二:https://scratch.mit.edu/projects/792735903
可以被4整除但不可以被100整除。
可以被400整除。
小試身手一下
這題目是【111年高雄市貓咪杯Scratch 數理邀請賽試題】第2題
可以與旁邊同學相互討論
寫一個程式輸入年月日可以計算哪一天是星期幾?
輸入範例一: 2022 12 3;輸出範例一: 星期六
輸入範例二: 2000 1 2 ;輸出範例二: 星期日
八、求一數值所有位數的和?
方法一:把數字當成【數字】看,超過17位數時,會出問題!
補充說明:以上測試發現在16位數以內的數都可以正確的求出結果來,但超過16位數以後,算出來的結果就不正確了。這是因為所有的程式語言裡,都會限制可使用的數字範圍,Scratch最大可以表示2的53 次方,就是 9,007,199,254,740,992,超過的話就會錯誤,這是電腦運算的極致,所以不算是Bug。
方法二:把數字當成【文字】看,超過17位數時,不會出問題!
九、模擬樂透開獎
模擬樂透開獎:亂數排序(從1~42中亂數出6個不同號碼並從小排到大)、使用分身的功能
排序方法一:氣泡排序(Bubble Sort)
演算法的運作如下:
比較相鄰的元素。如果第一個比第二個大,就交換它們兩個。
對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。這步做完後,最後的元素會是最大的數。
針對所有的元素重複以上的步驟,除了最後一個。
持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較。
十、求兩數的最大公因數及最小公倍數?
最大公因數(GCD)指能夠整除多個整數的最大正整數。而多個整數不能都為零。例如8和12的最大公因數為4。
同樣地,若干個整數公有的倍數中最小的正整數稱為它們的最小公倍數(LCM)。
這程式的寫法是利用求最大公因數所採用的【輾轉相除法】而來的
這題目是【111年高雄市貓咪杯Scratch 數理邀請賽試題】第6題
計算最大公因數和最小公倍數,請寫一個程式輸入兩個數 a b, (1<a<1000, 1<b<1000) 請算出這兩個數的最大公因數(Greatest Common Divisor, GCD)和最小公倍數( Least Common Multiple, LCM)
輸入範例一: 56 24;輸出範例一: GCD=8, LCM=168
輸入範例二: 125 75;輸出範例二: GCD=25, LCM=375
小試身手一下
這題目是【111年高雄市貓咪杯Scratch 數理邀請賽試題】第7題
時鐘盤面上計算兩針夾角為幾度? 請寫一個程式 輸入hh:mm, (例如:11:43) 程式可以算出兩針夾角為幾度。(不需要繪出時鐘)
輸入範例一: 4:20;輸出範例一: 10
輸入範例二: 4:21;輸出範例二: 4.5
小試身手一下
這題目是【111年高雄市貓咪杯Scratch 數理邀請賽試題】第8題
階層 在數學中,正整數的階乘(英語:Factorial)是所有小於等於該數的正整數的積,計為n!,例如5的階乘(5!=5x 4x 3x 2x 1=120) 表示為5!,其值為120:
現在請寫一個程式,輸入 N ,2<N<51,能夠算出正整數N的階乘的數值,這一題請留意 N>20 以後的有效數值,最好不要用指數型態 e 的自然對數表示數值。
2 != 2
3 != 6
4 != 24
5 != 120
6 != 720
輸入範例一: 5;輸出範例一: 5 != 120
輸入範例二: 20;輸出範例二: 20 !=
000
輸入範例三: 21;輸出範例三: 21 != 51090942171709440000
輸入範例三: 25;輸出範例三: 25 != 15511210043330985984000000
小試身手一下
這題目是【111年高雄市貓咪杯Scratch 數理邀請賽試題】第9題
請寫出一個程式,可以繪出一個圓裡面的正N邊多邊形。半徑長度 r=120 ,請畫出外接圓和圓心連接角的半徑(如右圖)