資訊內容
一道程序猿筆試面試必會題怎樣用scratch做出來?
很多家長覺得scratch太簡單了,只需要拖拽封裝好的積木塊就可以了。而我們scratch老師則會回應,scratch是低門檻高上限的,是沒有天花板的……為什么這么說,我們今天就看一看用scratch怎么來做一道程序猿筆試面試必須要會的一道題——排序!
題目的任務敘述很簡單:對一個已知數組,按照從小到大(或大到?。┡判?
?用scratch我們可以很快讓計算機給出任意數組,比如,可以有10個任意數字
?這樣我們就有了10個任意數
接下來,就是排序了。程序猿考試考的是算法,什么冒泡排序、選擇排序、插入排序等等。一個優秀的算法能使程序的性質帶來質的飛躍,在scratch里面同樣可以用這些算法來解決問題(謝聲濤《scratch趣味編程進階——妙趣橫生的數學和算法》書中第12章“撲克學算法”就將這些算法描述得非常透徹)。
在這里我們就用“選擇排序”的思路帶著大家用scratch實現從小到大排序
思路是這樣的:
第一輪:我們用第一個數字跟剩余的9個數比較大小,如果第一個數字比其他數字大,就交換這兩個數字的位置(因為我們的排序是從小到大,就讓小的數字在前面)。
具體:
1、第一個數字和第二個數字比較后,第一個數字89比第二個數字62大,就讓兩個數字換順序;2、再讓新的第一位置數字62和第三個數字45比較,比較之后45排到第一位置;3、新的第一位置數字45再跟第四個數字比較……以此類推,最終排在第一位置的數字是整個數組【L】中最小的數字。
程序腳本體現如下
我們新設一個變量【i】代表除了第1項以外的其他項,先將i設為2,通過讓i每次增加1,實現第一個數字(L的第一項)與其他各個數字比較。
在替換之前,需要設一個變量【temp】,作為數字交換過程中一個承接數字的臨時空間(我們通常稱為“罐子”,交換數據的原理可以用兩個杯子中的水交換來理解)。?第二輪:用與第一輪同樣的方法,讓第二個數字40跟剩余的8個數比較大小(第一個數字一旦排好了就不需要再動),也就是讓數組【L】的第2項,分別與從第3項、第4項、第5項……第10項逐一比較。
?得到如下順序的數組:
第三輪:用同樣的方法,讓第三個數字53跟剩余的7個數比較大小
第四輪:用同樣的方法,讓第四個數字跟剩余的6個數比較大小
……
最終得出排序結果
看到這里,您對這個排序程序的算法步驟應該是很明白了,但如果按照這樣下來這個腳本也太長了(即把以上所有腳本都要拼接起來),用scratch做反而很麻煩。那么有什么辦法可以簡化呢?
我們看到,在每一輪的第一個數字與其他幾個數字比較,可以用重復執行數字順序i+1就可以完成。而第二輪、第三輪……第十輪都是重復與第一輪一樣的方法,是不是也可以嵌套一個重復執行的順序呢?
答案當然是可以的!
?為了使我們兩個數的比較更加清楚,我們可以設兩個變量作為數組【L】的項目順序,一個設為【n】,一個設為【i】,以?n?來控制輪數,以?i?來實現每一輪里已確定一個比較數后另一個比較數的變更。腳本程序可以縮減如下:
當n=2時,i=n+1=3,i重復增加1,直到執行到10當n=3時,i=n+1=4,i重復增加1,直到執行到10……直到n執行到10(全部比較完畢)
這個用scratch排列數字的程序就基本完成了!
當然還可以用“制作新的積木”的方式將交換順序的腳本封裝,這就大大簡化了接著用冒泡排序、插入排序、希爾排序等等方式再來玩一遍數字排序!
制作新積木塊“交換數字”
所以說,用scratch一樣能玩C、C++、python中的算法!在很多競賽中就體現了排序這種算法的題。
到這里,你可能會松了一口氣,還好,這是競賽。我們成年人做這種題可能都有點繞暈??!那么告訴你,軟件編程預備級(scratch等級考試)4級中可能就會有類似難度的題!
知識點講完了,下面就給大家出一道scratch初級組(1-3年級)的一道編程題:
?任務:小明和幾名同學在周末一起參加了一場蘋果采摘活動,他們每個人摘到的蘋果的數量已經存到了【蘋果數量】列表里面,請你編寫代碼自動計算出摘的最多的比摘的最少的多摘了幾個,把結果保存到變量【結果】中。
舉例:摘的最多的摘了30?個,最少的摘了12?個,【結果】應該為18。
轉載自“啟迪少兒”公眾號的原創文章
原文作者:北京通州的迪迪媽
、
聲明:本文章由網友投稿作為教育分享用途,如有侵權原作者可通過郵件及時和我們聯系刪除
