[導讀]:超平老師計劃推出Scratch藍橋杯真題解析100講,這是超平老師解讀Scratch藍橋真題系列的第93講。
藍橋杯選拔賽每一屆都要舉行4~5次,和省賽、國賽相比,題目要簡單不少,再加上篇幅有限,是以我精挑細選了一部分題目進行解讀。
第11屆藍橋杯青少年組第6次選拔賽于原定于2020年2月15日舉行,因為疫情延期到5月31日,形式為線上考試。Scratch分為初級組和中級組,其中初級組面向7~10歲孩子,中級組面向11~14歲孩子。
123數字黑洞,本題是2020年2月15日舉行的第11屆藍橋杯Scratch選拔賽真題程式設計第4題,初級組和中級組都有此題,題目要求程式設計驗證123數學黑洞的計算過程。
先來看看題目的要求吧。
一.題目說明
背景資訊:
“123數學黑洞”,指的是對于任意一串數字串,按照一定規則經有限次重複後必得到“123”的結果,即任何數的最終結果都無法逃脫123黑洞。
其中的規則如下:
1). 對任何一串數字串統計出其中的偶數個數、奇數個數、總個數;
2). 按照“偶-奇-總”的方式進行排列,得到新的數字串;
再不斷循環這個算法,其最終結果一定會變成123。例如:12345,偶數個數2,奇數個數3,總個數5,我們得到235;235,偶數個數1,奇數個數2,總個數3,我們得到123;
程式設計實作:
1). 當綠旗被點選,請使用者輸入任意長度數字串,如圖例1;
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5SY2QTNxMTM2Q2Y0QWMyYjY0UTM1IzM4EWM5YTOklTYh9CX0JXZ252bj91Ztl2Lc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
2). 輸入數字串之後,說出這個數字串第一次計算的結果,第二次計算的結果,第三次......直到計算結果為123,如圖例2。
評判标準:
- 20分:能夠正常輸入數字串;
- 30分:小貓的第一次計算結果是正确的;
- 30分:小貓每次計算結果正确并最後得到123;
- 20分:小貓每次對次數的表述也完全正确,且完全符合題意。
二.思路分析
本題隻有1個角色,就是預設的小貓,如圖所示:
這是一道經典的遞歸算法題,那什麼是遞歸呢?
所謂遞歸,是指在函數的定義中使用函數自身的方法。通俗了解就是:我調用我自己。這是一種常用的解決問題的方法,它可以把”大事化小,小事化了“,進而輕松的解決問題。
看看下面這張圖,你立刻就能了解什麼是遞歸了:
構成遞歸需具備兩個條件:
1). 子問題須與原始問題為同樣的事,且更為簡單;
2). 不能無限制地調用本身,須有個出口。
對于本題而言,對于任何一個給定的數字串,先分别計算出偶數個數、奇數個數和總個數,然後組合得到一個新的數字,再重複這個操作,這就是一個典型的遞歸過程,遞歸的出口就是數字等于123。
在Scratch中,實作遞歸的方式就是定義一個自制積木,然後在自制積木中調用自己,自制積木必須帶有參數,同時要有結束條件。
算法的流程圖如下:
至于統計偶數和奇數就比較簡單了,使用循環逐個取出每個數字,再結合”a除以b的餘數“指令,就可以很輕松的判斷是偶數還是奇數了。
三.程式設計實作
根據題目描述和思路分析,我們可以分三步來編寫程式:
- 定義自制積木
- 使用自制積木
- 完善代碼
1. 定義自制積木
建立一個自制積木,将其命名為”123數字黑洞“,并添加參數”數字“,如圖:
然後編寫代碼如下:
簡要說明如下:
1). 在代碼塊的最後,又使用用了自制積木,這就是遞歸的展現,即在函數中調用自己(在Scratch中,自制積木就是函數);
2). 在Scratch中,對于數字,可以作為字元串來使用,是以這裡擷取數字和連接配接數字,使用的都是字元串指令。
2. 使用自制積木
有了自制積木,接下來就容易了,當綠旗被點選時,使用問答指令,然後調用自制積木即可,對應的代碼如下:
3. 完善代碼
運作程式,當輸入888888時,第一次顯示的效果如下:
這和題目的要求有些不相符,我們可以增加一個變量“次數”,表示目前是第幾次,在綠旗下面,将其初始化為0,增加代碼如下:
對應的,在自制積木中,改動兩個小地方,如下:
在說話指令中,使用了4個連接配接運算符,編寫代碼的時候,一定要細心一點,避免出錯。
再次運作程式,這一次和題目要求就完全一緻了,你可以輸入任何長度的數字串來看看黑洞效果吧。
四.總結與思考
本題難度系數為4,積木塊數量45個左右 ,涉及到的知識點主要包括:
- 遞歸的算法思想及其特點;
- 自制積木及其參數的使用,重點是遞歸的實作;
- 如何判斷奇偶數,使用取餘數指令看餘數是否等于0;
- 字元串運算符,包括擷取總個數,擷取指定字元和連接配接操作;
- 使用循環結合變量來周遊字元串;
- 循環和條件的嵌套用法。
本題有一定難度,重點是了解遞歸算法的程式設計思想及其實作。要實作遞歸需要確定如下三個方面:
1). 必須有自制積木,并且是帶參數的自制積木,每次調用的參數都不一樣;
2). 在自制積木中調用自制積木;
3). 必須有結束條件,否則就陷入死循環。
你知道嗎,123數字黑洞還有一個名字,叫做西西弗斯黑洞,這又是為什麼呢?
西西弗斯的故事出自希臘神話,天神為了懲罰科林斯國王西西弗斯,将一塊巨石推到一座陡峭的山頂上,但無論他怎樣努力,這塊巨石總是在到達山頂時卻又不可避免地滾下來,于是他隻得重新再推,永無休止。
之是以把數字串123稱作西西弗斯串,意思是說對于任意一數字串按本程式進行計算,所得的結果都是123,而且一旦變成123後,無論再計算多少次,都會永無休止地重複着123。
如果你覺得文章對你有所幫助,别忘了點贊,你的鼓勵是我堅持繼續寫下去的最大動力,Thanks♪(・ω・)ノ。
需要素材和源碼的,可以聯系本人,或者移步至同名wx号。