VFP趣味編程:百錢買百雞

公雞3元一隻,母雞5元一隻,小雞1元三隻。100元錢買100只雞,請算出公雞、母雞、小雞的數目。

思路分析:題目包含的條件有兩個:一是共買了100支雞,二是共花了100元錢。我們做最極端的假設,公雞可能是0100只,母雞可能也是0100只,小雞也一樣,將這三種情況用循環驗證符合條件的情況,那就要做100*100*100種情況分析。源程序ex6_1.prg如下:

SET TALK OFF
FOR x=0 TO 100
  
FOR Y=0 TO 100
    
FOR z=0 TO 100
      
IF 3*x+5*Y+z/3=100 AND x+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作爲條件,在條件成立時輸出xy100-x-y的值。當然要注意將3x+5y+(100-x-y)/3=100改寫成VFP表達式。源程序ex6_2.prg如下: 

結論:這種解決問題的方法叫窮舉法,將可能的情況一網打盡。不過在編寫程序的過程中,我們最好還是根據具體問題適當地做些優化,縮小窮舉的範圍,以加快運算的速度。

 

 

SET TALK OFF
FOR x=0 TO 33
  
FOR Y=0 TO 20
    
IF 3*x+5*Y+(100-x-Y)/3=100
      ? 
"公雞、母雞、小雞的數量分別有:",x,Y,100-x-Y
       ENDIF
    ENDFOR
ENDFOR
RETU
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章