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