列舉法 百錢百雞2

2022-09-30 19:18:12 字數 1098 閱讀 4279

中國數學家張邱建(公元五世紀,其它資料不詳),在他的《算經》中提出了著名的「百錢買百雞」問題:雞翁一,值錢五,雞母一,值錢三,雞雛三,值錢一。百錢買百雞,問翁、母、雛各幾何?

你的任務是:根據給定的錢數m,和買到的雞數n,輸出所有的方案。如果沒有可行方案,輸出none。

只有兩個整數m、n(0若干行,每行3個數,表示一種可行方案,分別表示雞翁、雞母、雞雛的數量。

100 100

0 25 75

4 18 78

8 11 81

12 4 84

所有方案,第一優先順序按公雞的數量從小到大排列。

列舉法的一些套路,確定以下內容:

列舉物件。有幾個來幾重迴圈

列舉範圍。

判斷條件。

根據題面資訊,

三個未知的列舉物件:公雞、母雞和小雞。

雞的數量最多n只。

需要滿足兩個條件

總數為n

總的**為m

第一版框架

for(int i=0;i<=n;i++)}}

}

分析複雜度三重迴圈\(o(n^3)\)的複雜度。該題目範圍,顯然會超時。需要進一步優化。

對於列舉法優化的幾個思考方向:

減少列舉物件

剪枝hash代替判斷

根據數量關係,三種雞加起來總共n只,那麼當已經確定公雞i,母雞j時,小雞的數量可等於\(n-i-j\)不用再迴圈列舉了。這樣就減少了一重迴圈。

再根據錢的總價為m,那麼公雞最多就是買\(\frac\)只,母雞最多就是買\(\frac\)只,不需要列舉到n,減少非必要的列舉。

第二版框架

for(int i=0;i<=m/5;i++)}}

}

#include #include using namespace std;

int main()

} }if(!flag)

return 0;

}

3 C語言百錢買百雞(百錢百雞,百雞問題)

中國古代數學家張丘建在他的 算經 中提出了乙個著名的 百錢買百雞問題 雞翁一,值錢五,雞母一,值錢三,雞雛三,值錢一,百錢買百雞,問翁 母 雛各幾何?1 使用 for 語句對 3 種雞的數嫌在事先確定好的範圍內進行窮舉並判斷,對滿足條件的 3 種雞的數量按指定格式輸出,否則進行下次迴圈。2 程式 如...

百錢百雞問題

問題陳述 這是我國古代一道有名的數學難題,要求用100元買100隻雞,其中公雞五元乙隻,母雞三元乙隻,每種至少買乙隻,求購買方案,程式中以x代表公雞,y代表母雞,z代表小雞 static void main string args 母雞 小雞 x,y,z console.read 最後得到的答案如下...

百錢買百雞

這是個很簡單的邏輯,本來沒有什麼太多值得分享的。並且實現程式網上隨處可見,鄙人也並未提出更高深的意見。在閒暇看書時,對比了以下兩種實現。發現,其 實數學計算的不定性,可利用計算機的不斷重複 篩選 得到想要結果 如第一種實現 但是,顯而易見的是,第一種實現有個複雜度的問題。而第二種實現,是在數學計算推...