浅谈Java解决鸡兔同笼问题的思路
問題
????????雞兔同籠是我國古代著名的趣題之一。大約在1500年前,《孫子算經》中記載了這樣一道題目: 上有三十五頭,下有九十四足,問雞兔各幾只?請編寫一個程序來解決這個問題。 動物都有一頭,兔子有四足,雞有兩足。
思路1
? ? ? ? 其本質并不是讓計算機去按照固定方程式去解答,而是利用了計算機可以進行繁雜的重復運算的特性,然后利用這個特性去讓計算機進行博弈,沒錯是讓計算機自己進行博弈,首先,我們隨便假設 雞 或者 兔子 為一個已知的數額,然后利用循環的特性去不斷的比較。
? ? ? ? 首先我們假設雞為0頭,循環條件設置小于等于35頭,現在雞的頭數已知,而兔的只數也就理所應當的知道了,35-0頭,那么開始進行每一次循環的比較,如果(雞的頭數*2+兔的頭數*4)== 已知的94足的話,那么就說明得到了正確的答案。
代碼1
for (int jiNums =0;jiNums<=35;jiNums++){if((jiNums*2+(35-jiNums)*4)==94&&(jiNums+(35-jiNums))==35){System.out.println("雞:"+jiNums+"\t兔:"+(35-jiNums));}}思路2
? ? ? ? 把未知的雞的數量和兔子的數量都假設出來,最大值為已知的總頭數35,然后進行循環,35*35=1225 次循環中總是可以找到符合 if()的條件!!!那么就是我們想要的正確值
代碼2
for(int jiNums = 0;jiNums<=35;jiNums++){for(int tuNums = 0;tuNums<=35;tuNums++){if((jiNums*2+tuNums*4)==94&&jiNums+tuNums==35){System.out.println("雞:"+jiNums+"\t兔:"+tuNums);}}}總結
? ? ? ? 看著代碼再看看思路再自己復制運行調試下,就理解了,其實很簡單,只不過就是我們太“聰明”想難了,忘記了計算機的特性,就是高速進行多次重復的運算。
附加
? ? ? ? 其實計算機語言解決這些求未知數的問題如果不使用固定的方程式帶入計算,那么就是以上的思路,其實思路一和思路二歸根結底都是一致的思路,思路就是:在已知的條件的范圍內進行循環,在多次循環中總是可以找到正確的答案!!!
? ? ? ? 建議直接使用思路2的寫法來寫,這個才是最好用的,且思路最符合貼切(讓計算機循環匹配)的寫法,思路1是有漏洞的,如果要求的未知數不是兩個,是兩個以上及其更多,就會很難或者無法完成,用思路2會簡單很多。
附加題
????????各位可以寫一下練習練習
????????在馬克思手稿中有一道趣味的數學問題:一共有30個人,可能包括男人、女人和小孩。他們在一家飯館吃飯共花了50先令, 其中每個男人花3先令,每個女人花2先令,每個小孩花1先令。請問男人、女人和小孩各幾人?請編寫一個程序來解決這個問題。
正確答案
代碼
//方法1for (int nan = 0; nan <= 30; nan++) {for (int nv = 0; nv <= 30; nv++) {for (int hai = 0; hai <= 30; hai++) {if ((nan * 3 + nv * 2 + hai * 1) == 50 && nan + nv + hai == 30) {System.out.println("男:" + nan + "\t女:" + nv + "\t小孩:" + hai);}}}}System.out.println("--------------------------------");//方法二for (int nan = 0; nan <= 30; nan++) {for(int nv = 0;nv<=30;nv++){int hai = 30-nan-nv;if ((nan * 3 + nv * 2 + hai * 1) == 50 && nan + nv + hai == 30) {System.out.println("男:" + nan + "\t女:" + nv + "\t小孩:" + (30 - nan - nv));}}}?
總結
以上是生活随笔為你收集整理的浅谈Java解决鸡兔同笼问题的思路的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 喝什么饮料相对来说比较健康?
- 下一篇: java美元兑换,(Java实现) 美元