C 演算法設計 雞兔同籠問題的多種求解方法

2021-10-24 15:52:56 字數 1517 閱讀 4159

問題:

今有雉兔同籠,上有三十五頭,下有九十四足,問雉兔各幾何?程式設計求雉兔各幾何。

解法1:人肉計算機

手工解方程,程式直接輸出答案,這是最短的程式,沒有之一。

#include

using

namespace std;

intmain()

解法2:方程求解

當然,也可以讓計算機解方程,省去手工計算的工作量。

#include

using

namespace std;

intmain()

解法3:暴力搜尋

再省點事,方程也不需要我們來變換,直接讓計算機逐個答案試探,反正計算機計算速度快,只要我們少動腦筋就行。

#include

using

namespace std;

intmain()

}}cout <<

"unsolvable!"

<< endl;

return0;

}

解法4:啟發式搜尋

其實上面的程式中,y不用迴圈,因為 y=35-x,這樣只需要 x 迴圈 36 次就能把答案找出來,速度比上面提高 36 倍。儘管計算機速度很快,我們還是盡可能減少不必要的搜尋工作。

#include

using

namespace std;

intmain()

} cout <<

"unsolvable!"

<< endl;

return0;

}

解法5:隨機求解

如果你對求x,y沒思路,可以分析一下它們的取值範圍,然後在取值範圍內隨機取值,然後檢驗一下這組隨機值是否為符合答案要求,如果符合的話,問題就搞定了。

別看不起隨機求解,很多複雜演算法都用到了這種技巧,用的好的話,能解決很多無法用公式求解的難題。正所謂亂拳打死師傅啊!

#include

using

namespace std;

intmain()

}return0;

}

解法6:燒腦筋求解方法

我覺得不炫耀一下技巧,顯得太 low 了,用遞迴方法給出一段**,慢慢燒腦筋去吧!

#include

using

namespace std;

intchickens

(int m,

int n)

intmain()

還可以利用 lambda表示式進一步化簡,但對於初學者,意義不大了,有興趣自己搞一下。

雞兔同籠問題

時間限制 3000 ms 記憶體限制 65535 kb 難度 1 描述 已知雞和兔的總數量為n,總腿數為m。輸入n和m,依次輸出雞和兔的數目,如果無解,則輸出 no answer 不要引號 輸入第一行輸入乙個資料a,代表接下來共有幾組資料,在接下來的 a 10 a行裡,每行都有乙個n和m.0輸出 輸...

雞兔同籠問題

雞兔同籠,是中國古代著名典型趣題之一,記載於 孫子算經 之中。雞兔同籠問題,是小學奧數的常見題型。許多小學算術應用題和填空題都可以轉化成這類問題,或者用解它的典型解法 假設法 來求解。因此很有必要學會它的解法和思路。通常是假設法比較簡單易懂一點。雞兔同籠是中國古代的數學名題之一。大約在1500年前,...

雞兔同籠問題

已知雞和兔的總數量為n,總腿數為m。輸入n和m,依次輸出雞和兔的數目,如果無解,則輸出 no answer 不要引號 第一行輸入乙個資料a,代表接下來共有幾組資料,在接下來的 a 10 a行裡,每行都有乙個n和m.0輸出雞兔的個數,或者no answer 214 32 10 16 12 2 no a...