Scratch案例|酷叮貓少兒編程

秦朝末年,楚漢爭霸。相傳有一次,韓信率領1500名將士與楚王大將李鋒交戰。苦戰一場,楚軍不敵,敗退回營。而漢軍也死傷約四五百人,於是韓信整頓兵馬也返回大本營。當漢軍走到一個山坡時,收到戰報,說有楚軍騎兵追來。韓信馳上高坡觀看,只見遠方塵土飛揚,敵軍來勢洶洶。漢軍大戰之後十分疲憊,此時敵兵襲來,不免人心惶惶。韓信仔細地觀看敵方,發現來敵不足五百騎,便急速點兵迎敵。只見韓信命令士兵3人站成一排,多出2名;接著命令士兵5人一排,多出3名;再命令士兵7人一排,多出2名。就這樣,一會兒功夫就點兵完畢,韓信馬上向將士們宣佈了漢軍的人數。

韓信一向用兵如神,此時點兵更是絕妙,將士們都覺得韓信是“神仙下凡”、“神機妙算”。韓信又對將士們說:敵人不足五百,我們居高臨下,以眾擊少,一定能打敗敵人。於是將士們士氣大振,順勢而下,向楚軍發起攻擊。一時間旌旗搖動,鼓聲震天,漢軍所向披靡,楚軍亂作一團。交戰不久,楚軍大敗而逃。

根據故事中給出的條件,你知道韓信算出漢軍有多少名將士嗎?

根據題意,韓信的漢軍1500將士死傷四五百人,也就是還有1000人左右。因此我們用枚舉法從1500人開始逐一減少,並判斷列舉的人數是否符合列隊的情況,直到人數小於1000為止。

根據上面介紹的算法,我們來編寫程序。首先,創建一個變量叫做“士兵數”,並將初值設為1500:

Scratch案例|酷叮貓少兒編程


並用“重複執行直到……”指令構建一個循環結構,用於列舉各種可能方案:

Scratch案例|酷叮貓少兒編程


接著,對列舉的各種方案,要逐一判斷是否符合列隊情況。韓信命令士兵列隊,3人一排,多出2名;5人一排,多出3名;7人一排,多出2名。可以用如下指令表示:

Scratch案例|酷叮貓少兒編程


以上三個條件是並列關係,我們把三個“如果……那麼”指令嵌套使用:

Scratch案例|酷叮貓少兒編程


如果找到符合以上條件的情況,則將其插入“軍隊人數”鏈表中:

Scratch案例|酷叮貓少兒編程


最後,解決這道“韓信點兵”問題的完整程序如下:

Scratch案例|酷叮貓少兒編程


點擊綠旗運行程序,得到如下5個解:

Scratch案例|酷叮貓少兒編程


根據題意,韓信的漢軍1500名將士在大戰之後死傷約四五百人,那麼在韓信點兵時,最接近的答案是,這支部隊可能有1073人。


分享到:


相關文章: