问题描述

无意间想起了这样一个问题:
一块钱可以买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)]  

当然还可以继续扩展其他的问题。个人感觉只要静心思考,应该都能想出来的。这里就不再叙述了。

说点题外话,刚看完一部电影,《怦然心动》,很经典的电影了,很好看,不过跟之前想想的不同,大家想看的可以点击这里

两个瓶盖换一瓶可乐问题相关推荐

  1. 现在有N元钱,两块钱一瓶,或者直接给你N瓶酒,两个空瓶换一瓶酒,四个瓶盖换一瓶酒,问你最后可以喝多少瓶?如果能借酒呢?

    问题描述:现在有N元钱,两块钱一瓶,或者直接给你N瓶酒,两个空瓶换一瓶酒,四个瓶盖换一瓶酒,问你最后可以喝多少瓶?如果能借酒呢? 解决思路1: N元钱,其实就是N/2瓶酒.所以我们在程序中直接使用N瓶 ...

  2. 一块钱买一瓶水,两个空瓶换一瓶水,三个瓶盖换一瓶水,现在有20块钱,一共可以喝多少瓶水?

    /* ************************************************************************ > File Name: water.cp ...

  3. 28人买可乐喝,3个可乐瓶盖可以换一瓶可乐

    import java.util.Scanner; public class Test10 { /*** 10.28人买可乐喝,3个可乐瓶盖可以换一瓶可乐,那么要买多少瓶可乐,够28人喝?* 假如是5 ...

  4. 28人买可乐喝,3个可乐瓶盖可以换一瓶可乐,那么要买多少瓶可乐,够28人喝?假如是50人,又需要买多少瓶可乐?(解读误区)

    28人买可乐喝,3个可乐瓶盖可以换一瓶可乐,那么要买多少瓶可乐,够28人喝?假如是50人,又需要买多少瓶可乐? 本来是一道很简单的问题(找个小学生都能算出来)但是大部分人都忽略了一个跟经济有关的问题. ...

  5. 28人买可乐喝,3个可乐瓶盖可以换一瓶可乐,那么要买多少瓶可乐,够28人喝?

    第一种: package jihuoma; //28人买可乐喝,3个可乐瓶盖可以换一瓶可乐,那么要买多少瓶可乐,够28人喝? public class dsad {public static void ...

  6. 28人买可乐喝,3个可乐瓶盖可以换一瓶可乐,那么要买多少瓶可乐

    题目 28人买可乐喝,3个可乐瓶盖可以换一瓶可乐,那么要买多少瓶可乐,够28人喝? 假如是50人,又需要买多少瓶可乐?(需写出分析思路) public class Test { public stat ...

  7. 一块钱买一瓶水,两个空瓶换一瓶水,三个瓶盖换一瓶水,现在有20块钱,一共可以喝多少瓶水?(方法2)

    package com.zhiyou101; /*** 一块钱买一瓶水,两个空瓶换一瓶水,三个瓶盖换一瓶水,现在有20块钱,一共可以喝多少瓶水?* @author Administrator**/pu ...

  8. 一块钱可以买一瓶水 两个空瓶可以换一瓶水 三个瓶盖换一瓶水 请问二十块钱可以买多少瓶水?

    package Test;import java.util.Scanner;/*** 一块钱可以买一瓶水 两个空瓶可以换一瓶水 三个瓶盖换一瓶水* 请问二十块钱可以买多少瓶水?* @author ui ...

  9. 喝可乐问题,2个空瓶换一瓶可乐

    商店里可乐一元一瓶,两个空瓶可以换一瓶可乐,有20元,问可以喝到多少可乐 方法一:一次性把可乐喝完,然后拿瓶去换,换完再喝....(兑换剩余的瓶子要收集一下) int colaNum = 20;// ...

最新文章

  1. 性能调优-SQL TRACE
  2. 5GS 协议栈 — N1 接口的协议栈(NAS)
  3. 归并排序--数组和链表的实现
  4. Embeded linux之移植iptables
  5. 如何不使用让menu控件不回发(postback)
  6. Web安全测试实战之测试HTTP方法
  7. 等待其他线程执行完后执行(CountDownLatch)
  8. 物理学四大神兽!今分享一些有意思的东西~~
  9. hulu dpp_什么是直播电视的Hulu,它可以代替您的有线电视订阅吗?
  10. 下载网站 favicon 图标的 3 种方法
  11. 全球时区查询 API数据接口
  12. 深度学习在文档矫正中的应用
  13. 人际交往中的谈话技巧
  14. Spring Cloud Gateway之踩坑日记
  15. 清华计算机考研csp,「考研2021」400分跨考清华大学软件学院经验帖
  16. Cover Letter实用指南
  17. 神歌单:听这些程序员敲代码效率飞起来
  18. python的双色球模拟算奖
  19. 电商模式术语:ABC、B2B、B2C、C2C、B2M、M2C、B2A、C2A、O2O
  20. Windows如何用sha1验证文件完整性

热门文章

  1. poker -3 +白鹭引擎
  2. 最新版CATIA,让您快速创造完整高级机械项目
  3. 看过这篇文章,一切关于NFT的疑问都可以迎刃而解
  4. Swift_代码混淆
  5. 8、iOS strip 与 dead strip
  6. 安卓7.0以后如何开启手电筒
  7. 关于 字号、PX像素、PT点数、em、CM厘米、MM毫米之间的换算
  8. HasMap简单实现
  9. 《Lynda.com XML 必备教程》(Lynda.com XML Essential Training)CFE 教程
  10. windows服务编程