1. 程式人生 > >VFP趣味程式設計:百錢買百雞

VFP趣味程式設計:百錢買百雞

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

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

SET TALK OFF
FOR x=0TO100
  
FOR Y=0TO100
    
FOR z=0TO100
      
IF3*x+5*Y+z/3=100AND 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=0TO33
  
FOR Y=0TO20
    
IF3*x+5*Y+(100-x-Y)/3=100
      ? 
"公雞、母雞、小雞的數量分別有:",x,Y,100-x-Y
       ENDIF
    ENDFOR
ENDFOR
RETU