【CodeCombat運算思維】數學方法+程序方法巧解數學題-AI4kids

先看一道小學國際數學奧林匹克難度計算題 有兩類三位數,其中A類滿足各個數字上的數的和是19,B類滿足各個數字上的數的和為8,請問A類數更多還是B類數更多?多出幾個? 一般數學解法 大部分學生首先想到的是列舉法,分析滿足A條件(100A + 10B + C = 19)和B條件(100A + 10B + C =8)的所有數的列表(如下圖),這是一項比較費時費力的方法,而且可能因為馬虎會少列幾個數字而導致答案錯誤。

20230707_content_045_CodeCombat-Computational-Thinking2_600x600

改良數學解法我們仔細觀察, A的三位數數位之和是19 , B的三位數數位之和是8 ,兩者加起來19+8 = 27 ,正好是9 + 9 + 9 ,這就代表和為8的三位數(ABC)都正好有一個和為19的數對應(9-A 9-B 9-C) 。  

另外,我們從三個位數和為19的數比較三個數位和為8的數,發現和為19的三位數多了首位是9的數,這正好是9個,(當A=0時三位數退化成兩位數不符合條件),因此得出A類數更多, A類數比B類數多出9個。

一般程序解題 在了解解題方法後,我們用Python程序來解答這道題。把題目條件的邏輯寫清楚,程序上用到了CodeCombat電腦科學4的主要知識點如For循環、遍歷、列表、算數運算等知識點, 16行程式碼(如下圖)寫好後,運行馬上得出符合A類條件的數是45個, B類條件的數是36個。

20230707_content_045_CodeCombat-Computational-Thinking3_600x600

改良算法解題

我們還可以把題目的邏輯進一步優化,把16行程式碼簡化成1行程式碼,輸入程序,馬上得出正確答案為9.

print (sum ([1 if s==19 else (-1 if s==8 else0) for s in [x//100 + x//10%10 + x%10 for x in range (100,1000)]]))

針對這道數學題,程序的解法更通用,因為程序可以處理任何三位數的和問題。而精巧的數學解法發現了這道題條件的特殊性,給出了本題的更簡潔的解法。 數學方法是根基,電腦的強項是強大的計算能力,數學思維結合電腦的強大計算能力,往往事半功倍,這也是我們鼓勵同學們學習程式,讓思考問題和解決問題多了一個維度,追求解法的優化和改進。

想了解更多?點擊按體驗免費程式課程!

更多相關文章

返回網誌