兩個瓶蓋換一瓶可樂問題

問題描述

無意間想起了這樣一個問題:
一塊錢可以買1瓶可樂,兩個瓶蓋子可以又可以換一瓶可樂,問,現在有十塊錢,最多可以喝多少瓶可樂?

背景

相信這個問題應該有不少人問過,而且,面試編程的時候居然也有人問這種問題。剛認真思考了一下,得出答案如下:


方法一

分析:

首先,10塊錢一次性可以買10瓶,單拿出一瓶,而從剩下的9瓶中,每次拿出一個瓶蓋和這個瓶蓋就可以再換一瓶可樂,並且得到一個瓶蓋,即,一共可以換得:

1+2*(10-1)=19(瓶)

如果是y元,那則一共可以換得:

1+2*(y-1)=2*y-1(瓶)

似乎,這樣就算做完了,那麼問題來了,如果現在是2塊錢一瓶呢?這個問題可以劃歸爲1塊錢一瓶,而一共有[y/2]的問題,中括號是取整的意思。


那再進一步擴展,那如果是三個瓶蓋換一瓶可樂呢?咋一看問題似乎有點複雜,我第一時間的想法是:
直接按照正常人的思維,10塊錢可以買10瓶,然而得到的蓋子可以換3瓶可樂,並且剩餘一個蓋子,再把剩下的這個蓋子和新得到的3個蓋子換1瓶可樂,剩餘1+1=2個蓋子,如此往復,當剩餘的蓋子數目小於3時,程序終止。

如下過程:

10      %   3 = 3......1
(3+1)   %   3 = 1......1
(1+1)         <3, 程序終止。
 //最後得到10+3+1個蓋子。

代碼我就不上了,很簡單,可以用遞歸或者循環解決。

但是再仔細一想,這個應該也可以求得其通項。

分析:

一次性可以買10瓶,先拿出1個蓋子,剩下得9=2*4+1個蓋子,每兩個蓋子和這個蓋子組合就可以換一瓶新的可樂,並且得到一個新蓋子,即一共還可以再換得4瓶,最後剩餘兩個蓋子,最後,一共可以換得:

10 + [(10-1)/2] = 14(瓶)

相應的,如果時k個蓋子可以換一瓶可樂,n元可以換得的瓶子數的通項就是:

n+[(n-1)/(k-1)]         //中括號表示取整

再進一步擴展,如果除了蓋子,空的瓶子也能換可樂呢?比如 m個瓶子換一瓶可樂,那通項應該是:

n+[(n-1)/(k-1)] +[(n-1)/(m-1)]  

當然還可以繼續擴展其他的問題。個人感覺只要靜心思考,應該都能想出來的。這裏就不再敘述了。

說點題外話,剛看完一部電影,《怦然心動》,很經典的電影了,很好看,不過跟之前想想的不同,大家想看的可以點擊這裏

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章