桃、李、橄欖購買問題

算法課上,老師講了一個問題的算法實現,感覺很典型,也很有意思。
問題:桃3錢一個、李4錢一個、橄欖1錢7個,若百錢購得百個,求桃、李、橄欖各幾個?並給出實現算法
     對於這樣的問題,第一感覺就是得出其方程組(設桃x個、李y個、橄欖z個)
                        x+y+z=100
                        3x+4y+z/7=100
                       其中:x、y、z爲0-100之內的整數
     這個問題可以用o(n^3)、o(n^2)的算法實現,一般我們對於這樣的問題只要實現並得出結果了之後就不再深究了。其實可以用一個o(n)的算法實現之。 
     思路:第二式乘7,然後減去第一式可得到
                      20x+27y=600
           通過此式可以得出x爲3的倍數,y是20的倍數且不大於600/27<30;
           也就是說y只有0、20兩種取值可能,然後x則可以通過此式取得x=(600-27y)/20
           最後z可以通過x+y+z=100獲得。
           根據這種思路只需要循環兩次就可以把結果求解出來。
    具體的C#代碼如下:
           int x, y, z;//其中桃爲x,李爲y,橄欖爲z
            for (y = 0; y <= 20; y += 20)
            {
                x = (600 - 27 * y) / 20;
                z = 100 - x - y;
                if ((3 * x + 4 * y + z / 7) == 100)
                {
                    Console.WriteLine("符合要求的結果爲:桃(x)-{0};李(y)-{1};橄欖(z)-{2}", x, y, z);
                }
            }
   運行結果爲:
            符合要求的結果爲:桃(x)-30;李(y)-0;橄欖(z)-70
            符合要求的結果爲:桃(x)-3;李(y)-20;橄欖(z)-77
體會:其實利用計算機和垃圾處理有類似——如果在垃圾處理之前能很好的把垃圾進行分類,則在處理的時候就可以節省很多 資源和時間;計算機也一樣,若在給計算機處理之間,能進行比較細緻的分析和處理,然後再交給計算機處理,往往可以節省很多的計算機時間和計算機資源。
     在社會大分工的情況之下,每一個部分都是大分工中不可缺少的部分,所以每一部分都是需要努力完成和做好的。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章