百錢買百雞

來源:互聯網
上載者:User

標籤: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次就得出了結果,提高了效率。
所以使用程式解決一個數學問題,首先還是要對問題進行充分的分析,

可以將問題轉化為另外一種形式,使程式更加簡潔和容易實現,何樂而不為呢?

百錢買百雞

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.