公雞3元乙隻,母雞5元乙隻,小雞1元三隻。100元錢買100隻雞,請算出公雞、母雞、小雞的數目。
思路分析:題目包含的條件有兩個:一是共買了100支雞,二是共花了100元錢。我們做最極端的假設,公雞可能是0至100只,母雞可能也是0至100只,小雞也一樣,將這三種情況用迴圈驗證符合條件的情況,那就要做100*100*100種情況分析。源程式ex6_1.prg如下:
settalk
offforx=0
to100
fory=0
to100
forz=0
to100
if3*x+5
*y+z
/3=100
andx+y
+z=100
? "公雞、母雞、小雞的數量分別是:
",x,y,z
endif
endfor
endfor
endfor
retu
當然,在解決具體問題時,可以將情況簡化一下,以提高執行速度。
假設公雞為x只,母雞為y只,則小雞只能是100-x-y只,也就有了3x+5y+(100-x-y)/3=100。從這個二元方程,不難看出大體情況是:公雞最多33只,最少是沒有,即0<=x<=33;母雞最多20只,0<=y<=20,所以可能的方案有34*21種,在這麼多的方案中,可能有一種或幾種方案正好符合相等的條件。
我們如何將這34*21種方案羅列出來呢?最好的辦法是用迴圈。可用兩層迴圈的巢狀,即將乙個關於公雞數和乙個關於母雞數的迴圈巢狀起來,就能將所有的方案都遍歷一次。後面的問題就成了如何判斷哪一種方案是我們尋找的符合條件的方案呢?只能根據「百錢買百雞」即3x+5y+(100-x-y)/3=100作為條件,在條件成立時輸出x、y、100-x-y的值。當然要注意將3x+5y+(100-x-y)/3=100改寫成vfp表示式。源程式ex6_2.prg如下:
結論:這種解決問題的方法叫窮舉法,將可能的情況一網打盡。不過在編寫程式的過程中,我們最好還是根據具體問題適當地做些優化,縮小窮舉的範圍,以加快運算的速度。
settalk
offforx=0
to33
fory=0
to20
if3*x+5
*y+(
100-x-
y)/3=
100?
"公雞、母雞、小雞的數量分別有:
",x,y,
100-x-
yendif
endfor
endfor
retu
百錢買百雞
這是個很簡單的邏輯,本來沒有什麼太多值得分享的。並且實現程式網上隨處可見,鄙人也並未提出更高深的意見。在閒暇看書時,對比了以下兩種實現。發現,其 實數學計算的不定性,可利用計算機的不斷重複 篩選 得到想要結果 如第一種實現 但是,顯而易見的是,第一種實現有個複雜度的問題。而第二種實現,是在數學計算推...
百錢買百雞
百錢買百雞。中國古代數學家張丘建在他的 算經 中提出了著名的 百錢買百雞 問題 雞翁一,值錢五 雞母一,值錢三 雞雛三,值錢一 百錢買百雞,翁 cock 母 hen 雛 chick 各幾何?include int main int cock,hen,chick printf cock t,hen t...
百錢買百雞
時間限制 1 sec 記憶體限制 128 mb 百錢買百雞問題 公雞五文錢乙隻,母雞三文錢乙隻,小雞三隻一文錢,用100文錢買100隻雞,公雞 母雞 小雞各買多少只?本程式要求解的問題是 給定乙個正整數n,用n文錢買n隻雞,問公雞 母雞 小雞各買多少只?輸入乙個正整數n n 100 如果有解,種組合...