百錢百雞問題:中國古代數學家張丘建在他的《算經》中提出了著名的「百錢買百雞問題」:雞翁一,值錢五,雞母一,值錢三,雞雛三,值錢一,百錢買百雞,問翁、母、雛各幾何?
,題意給定共
100錢要買百雞,若全買公雞最多買
20只,顯然
x的值在
0~20
之間;同理,
y的取值範圍在
0~33
之間,可得到下面的不定方程:
5x+3y+z/3=100
x+y+z=100
所以此問題可歸結為求這個不定方程的整數解。
由程式設計實現不定方程的求解與手工計算不同。在分析確定方程中未知數變化範圍的前提下,可通過對未知數可變範圍的窮舉,驗證方程在什麼情況下成立,從而得到相應的解。
引申:這類求解不定方程的實現,各層迴圈的控制變數直接與方程未知數有關,且採用對未知數的取值範圍上窮舉和組合的方法來覆蓋可能得到的全部各組解。如果要採取技巧,往往是根據題意,更合理地設定迴圈控制條件來減少這種窮舉和組合的次數,提高程式的執行效率,需要具體問題具體分析。
#include using namespace std;
int main()
{ int x,y,z; //定義資料型別為整型,買雞和買烤雞不是乙個概念
for(x=0;x<=20;++x)
for(y=0;y<=33;++y) //窮舉中。。。。
改進一:
#include using namespace std;
int main()
{ int x,y,z; //定義資料型別為整型,防止出現買烤雞情況的出現
for(x=0;x<=20;++x)
for(y=0;y<=33;++y)
for(z=0;z<=300;z+=3) //既然z要整除3,每次自加3去保證,少了迴圈,也少了判斷
if(5*x+3*y+z/3==100 && x+y+z==100)
{ cout<
改進二:
#include using namespace std;
int main()
{ int x,y,z;
for(x=0;x<=20;++x)
for(y=0;y<=33;++y)
{ z=100-x-y; //雞雛數就此確定,何須再去試探——窮舉只是笨辦法,人可以讓計算機輕鬆些
if(5*x+3*y+z/3==100&&z%3==0)
cout<
3 C語言百錢買百雞(百錢百雞,百雞問題)
中國古代數學家張丘建在他的 算經 中提出了乙個著名的 百錢買百雞問題 雞翁一,值錢五,雞母一,值錢三,雞雛三,值錢一,百錢買百雞,問翁 母 雛各幾何?1 使用 for 語句對 3 種雞的數嫌在事先確定好的範圍內進行窮舉並判斷,對滿足條件的 3 種雞的數量按指定格式輸出,否則進行下次迴圈。2 程式 如...
百錢百雞問題
問題陳述 這是我國古代一道有名的數學難題,要求用100元買100隻雞,其中公雞五元乙隻,母雞三元乙隻,每種至少買乙隻,求購買方案,程式中以x代表公雞,y代表母雞,z代表小雞 static void main string args 母雞 小雞 x,y,z console.read 最後得到的答案如下...
百錢買百雞
這是個很簡單的邏輯,本來沒有什麼太多值得分享的。並且實現程式網上隨處可見,鄙人也並未提出更高深的意見。在閒暇看書時,對比了以下兩種實現。發現,其 實數學計算的不定性,可利用計算機的不斷重複 篩選 得到想要結果 如第一種實現 但是,顯而易見的是,第一種實現有個複雜度的問題。而第二種實現,是在數學計算推...