古詩中不僅有山水人物家國情懷,還有數(shù)學(xué)題呢,它是古算家智慧的光芒,在感受古詩詞的美的同時也體會到了數(shù)學(xué)的奧妙,啟迪我們的心智。用編程解決這樣的古算詩題會更容易更有趣。本章我們將學(xué)習(xí)用編程解決數(shù)學(xué)里的一元一次方程和二元一次方程。
所謂一元一次方程,就是在含有未知數(shù)的等式中,未知數(shù)的種數(shù)有一種,并且未知數(shù)的最高次方為一次。所謂二元一次方程,就是在含有未知數(shù)的等式中,未知數(shù)的種數(shù)有兩種,并且未知數(shù)的最高次方為一次。
牧童分杏
牧童分杏各競爭,不知人數(shù)不知杏;
三人五個多十枚,四人八枚兩個剩。
牧童和杏各幾何?
1. 題意分析:有一群牧童爭著分杏,如果按照每3個人分5個杏子就會剩下10個,但是按照每4個人分8個杏子就會剩下2個,請問牧童有多少人?有多少杏子?
2. 題意轉(zhuǎn)換:由于保持恒定不變的是杏子的總數(shù),所以假設(shè)牧童的個數(shù)為X,則可以通過兩個含有未知數(shù)的式子算出杏子的個數(shù):5個杏子分給3個人,一人分5/3個,剩余10個;第二種,8個杏子分給4個人,一人分8/4個,剩余2個。
3. 數(shù)學(xué)求解
5/3*X+10=8/4*X+2;
5/3*X-2*X=-8;
-1/3*X=-8;
X=-8×-3;
X=24;
求解出答案,牧童人數(shù)為24,得出杏子總數(shù)為8/4*24+2=50個。
4. 程序推理
用程序解方程和數(shù)學(xué)求解思路并不相同,一般用例舉方程所有可能解的方法——枚舉法。當(dāng)一個問題有有限種解的情況,我們將這個有限種情況一一列舉,并加以驗(yàn)證,枚舉的極限情況就是完全歸納法(找出了所有可能情況進(jìn)行驗(yàn)證)。枚舉這是一種樸素的思維方法,卻有著強(qiáng)有力的邏輯內(nèi)涵,同時也切實(shí)有效,與計(jì)算機(jī)的高速運(yùn)算能力極其相配。
先假設(shè)牧童有1個(X=1),判斷5/3*X+10=8/4*X+2條件是否成立,若成立則找到答案,若不成立,假設(shè)牧童有2個(牧童增加1),判斷5/3*X+10=8/4*X+2條件是否成立,若成立則找到答案,若不成立……以此類推求出答案。這樣將變量的所有可能的取值依次去檢驗(yàn)的算法就是枚舉算法,我們在用程序求解方程的解的時候枚舉算法是經(jīng)常被采用的方法之一。
運(yùn)用循環(huán)和變量就可以實(shí)現(xiàn)枚舉求解,程序如下圖。
二元一次方程,就是含有兩個未知數(shù),并且未知數(shù)的最高次方為一次的整式方程。所有二元一次方程都可化為aX+bY+c=0(a、b≠0)的一般式與ax+by=c(a、b≠0)的標(biāo)準(zhǔn)式,例如我們常見的雞兔同籠問題。
一個二元一次方程通??梢匀绱吮硎荆?/p>
經(jīng)過求解可得求根公式:
有了這個公式,我們用程序?qū)⒐奖磉_(dá)出來,計(jì)算時輸入abcdef的值就可讓程序幫忙計(jì)算了。
比如一個方程:
那么依次填入a=3,b=1,c=4,d=2,e=2,f=0,按空格就可以計(jì)算出x=2,y=-4。