intoweb
共有24個(gè)國(guó)家的球隊(duì)需要分成4組進(jìn)行小組賽,現(xiàn)在請(qǐng)你用Scratch編寫一個(gè)分組程序,將24支球隊(duì)隨機(jī)分為4組。
24支球隊(duì)分別是:塞爾維亞、捷克、波蘭、立陶宛、意大利、希臘、俄羅斯、巴西、委內(nèi)瑞拉、波多黎各、多米尼加、德國(guó)、新西蘭、突尼斯、加拿大、土耳其、中國(guó)、菲律賓、斯洛文尼亞、克羅地亞、塞內(nèi)加爾、安哥拉、墨西哥、烏拉圭。
參賽隊(duì)伍一共有24支,如果編程時(shí)每次都需要重新輸入工作量可就太大了。Scratch的列表有導(dǎo)入和導(dǎo)出功能的,右鍵點(diǎn)擊列表就有“導(dǎo)入和導(dǎo)出”菜單,選擇文本文件即可導(dǎo)入。列表每項(xiàng)對(duì)應(yīng)文本的一行,文本編碼為UTF-8,否則導(dǎo)入會(huì)是亂碼。
A:將1到24依次放入一個(gè)列表的隨機(jī)位置,這樣就獲得了24個(gè)數(shù)字隨機(jī)排列的“隊(duì)伍編號(hào)”列表。將“隊(duì)伍編號(hào)”的第一項(xiàng)對(duì)應(yīng)的序號(hào)從參賽隊(duì)中抽取出來放入A分組,并刪除“隊(duì)伍編號(hào)”列表的第一項(xiàng)。接著不斷將“隊(duì)伍編號(hào)”列表的第一項(xiàng)對(duì)應(yīng)球隊(duì)抽出放入B、C、D分組,重復(fù)6次,將所有球隊(duì)分配完畢。
B:另外一種解題思路與實(shí)際抽簽的操作一致,但是編寫難度稍高。將參賽的24支隊(duì)伍放入一個(gè)列表中,通過生成隨機(jī)數(shù)(1-24)就可以隨機(jī)地取出一支隊(duì)伍,存入第一小組里,把這個(gè)隊(duì)伍從列表中刪除,接下來參賽隊(duì)伍就只有23支了。接著生成(1-23)的隨機(jī)數(shù)再取出一支隊(duì)伍,并放入第A分組,從列表中刪除。以此類推,就如同我們抽簽一樣,取出一個(gè)少一個(gè),A組取6個(gè),然后其他組從剩下的里面再抽。
1) 建立列表“參賽隊(duì)伍”并右鍵導(dǎo)入24支隊(duì)伍名,建立“隊(duì)伍編號(hào)”列表記錄隨機(jī)順序,建立“ABCD”4個(gè)列表記錄分組結(jié)果。建立臨時(shí)變量“i”,i=0。點(diǎn)擊綠旗清空隊(duì)伍編號(hào)和ABCD列表。
2) 將1-24隨機(jī)填入“隊(duì)伍編號(hào)”列表。重復(fù)執(zhí)行24次:i=i+1,在隊(duì)伍編號(hào)的第1到隊(duì)伍編號(hào)的項(xiàng)目數(shù)之間取隨機(jī)數(shù)項(xiàng)前插入i。
3) 依次將“隊(duì)伍編號(hào)”列表的第1項(xiàng)序號(hào)從對(duì)應(yīng)“參賽隊(duì)伍”列表中提取到A、B、C、D分組列表并刪除“隊(duì)伍編號(hào)”列表的第1項(xiàng)。
1) 建立列表“參賽隊(duì)伍”并右鍵導(dǎo)入24支隊(duì)伍名,建立“隊(duì)伍編號(hào)”列表順序存儲(chǔ)1-24個(gè)數(shù)字,建立“ABCD”4個(gè)列表記錄分組結(jié)果。建立臨時(shí)變量“i”,i=0。點(diǎn)擊綠旗清空隊(duì)伍編號(hào)和ABCD列表。
2) 從“隊(duì)伍編號(hào)”列表中隨機(jī)抽取1項(xiàng)i,將“參賽隊(duì)伍”的第i項(xiàng)加入A組,刪除“隊(duì)伍編號(hào)”的第i項(xiàng)。這樣就隨機(jī)抽取了1個(gè)隊(duì)伍到A組,下面依次從“參賽隊(duì)伍”列表中隨機(jī)抽取到BCD組中,然后開始下一次循環(huán)。
兩種解法都可以達(dá)到對(duì)隊(duì)伍隨機(jī)分組的目的,我將完整源代碼保存在阿爾法營(yíng)(www.aerfaying.com),你可以搜索“Scratch對(duì)24隊(duì)隨機(jī)分組”下載后自行分析和改進(jìn)。