標籤:style blog http color os 使用 sp for div
原文:百錢買百雞
問題:“雞翁一值錢五,雞母一值錢三,雞雛三值錢一”.
說明:一隻公雞值五錢,一隻母雞值三錢,三隻小雞值一錢,問如何用100錢買100隻雞?
設公雞、母雞、雞雛分別值x,y,z錢。
a.演算法一:窮舉法
則:
1<= x <=19,
1<= y <=32,
3<= z <=98(步長為3)
窮舉法求解:
代碼
1 for(int x=1;x<=19;x++)2 for(int y=1;y<=32;y++)3 for(int z=3;z<=98;z+=3) //步長為34 {5 if( x+y+z==100 && 5*x+3*y+z/3==100 ) //百錢百雞條件6 {7 printf("%d %d %d",x,y,z);8 }9 }
窮舉法遍曆了所有可能出現的情況,最終也可以得到正確的結果,這是發揮了電腦的快速運算的能力,
但是這樣子把問題全部拋給電腦去處理並不是我們所追求的,在這個問題上,其實可以讓迴圈層數減少
到一層,我們知道“百錢買百雞”這個問題的兩個條件需要滿足,第一個就是錢數為100,另一個為雞數為100,
在演算法一上我們是將這個條件放到了程式中去判斷(if( x+y+z==100 && 5*x+3*y+z/3==100 )),
在演算法二我將先將這兩個條件的方程式組合成方程組,然後將方程組化簡,最終再通過程式解決問題。
b.演算法二:化簡方程組
方程組:
x+y+z=100,
5x+3y+z/3=100
將上式整理得:
y=25-7x/4,
z=75+3x/4
x,y,z需要滿足上式,並且通過式子可知x必須要為4的整數倍。
代碼:
for(int x=4;x<=19;x+=4){ y=25-7*x/4; z=75+3*x/4; if( y>0 && z<=98 ) printf("%d %d %d",x,y,z);}
演算法二隻迴圈了4次就得出了結果,提高了效率。
所以使用程式解決一個數學問題,首先還是要對問題進行充分的分析,
可以將問題轉化為另外一種形式,使程式更加簡潔和容易實現,何樂而不為呢?
百錢買百雞