1.百錢買白雞

一隻公雞值五錢,一隻母雞值三錢,三隻小雞值一錢,現在用百錢買百雞,請問公雞,母雞,小雞各有多少隻?

其所要滿足的條件是
1.公雞母雞小雞的數量總和爲100只
2.公雞的錢數母雞的錢數和小雞的錢數的總和爲100錢

以下是第一種解決方案:

#include<stdio.h>
int main()
{
    int cock,hen,chicken;
    for(cock=0;cock<=20;cock++)
    {
        for(hen=0;hen<=33;hen++)
        {
            for(chicken=0;chicken<=100;chicken++)
//雖然小雞的數目可以達到300只,但是題目中只要求100只即可,所以只寫出100
            {
if((5*cock+3*hen+chicken/3.0==100)&&(cock+hen+chicken==100))
  printf("cock=%2d,hen=%2d,chicken=%2d\n",cock,hen,chicken);
            }
        }
    }
}

以上問題算法需要嘗試21*34*101=72114次,算法的效率顯然太低。對於這類求解不定方程的問題,各層循環的控制變量直接與方程方程的未知數相關,且採用對未知數的取值範圍窮舉和組合的方法可得到全部的解。

所以我們可以採用第二種方案:

#include<stdio.h>
int main()
{
    int cock,hen,chicken;
    for(cock=0;cock<=20;cock++)
    {
        for(hen=0;hen<=33;hen++)
        {
            chicken=100-cock-hen;
if((5*cock+3*hen+chicken/3.0==100)&&(cock+hen+chicken==100))
   printf("cock=%2d,hen=%2d,chicken=%2d\n",cock,hen,chicken);       
        }
    }
}

此算法只需嘗試21*34=714計時,進一步提高效率。

發佈了32 篇原創文章 · 獲贊 29 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章