博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
喝汽水问题
阅读量:5916 次
发布时间:2019-06-19

本文共 1326 字,大约阅读时间需要 4 分钟。

喝汽水问题

                                                  by flyinghearts

 

1000瓶汽水,喝完后每3个空瓶能换1瓶汽水,问最后最多可以喝几瓶汽水,此时剩余几个空瓶?

 

 

不妨假设,共有n瓶汽水,每a个空瓶能换b瓶汽水(a > b)。刚开始有n瓶汽水,喝完后就有n个空瓶,多喝的汽水是靠空瓶换来的,每进行一次空瓶换汽水,就能多喝b瓶汽水、空瓶数目就减少了a-ba个空瓶换了b瓶汽水,喝完后得到b个空瓶)。

 

(下面 [x] 表示x的整数部分)

1 如果允许从别处(老板或其他顾客处)借空瓶(当然,有借有还)

空瓶换汽水次数:   [n / (a - b)]

最后剩余空瓶:     n % (a - b)

总共可以喝到汽水: n + [n / (a - b)] * b

 

2 不允许借空瓶

 空瓶换汽水过程中,一但空瓶数小于a,则停止交换。

  n < a,显然,空瓶换汽水次数为0,总共可以喝到汽水n瓶,最后剩余空瓶n

  n >= a:(下面提供三种解法)

  解法一    空瓶换汽水次数k等于满足n – (a-b)*t < a的最小非负整数t:

              t > (n-a)/(a-b),最小的t [(n-a)/(a-b)] + 1 = [(n-b)/(a-b)]

              剩余的空瓶数:n – (a-b)*t

= n – (a-b)*([(n-b)/(a-b)])

                           = b + (n-b) - (a-b)*([(n-b)/(a-b)])

= b + (n-b)%(a-b)

 

解法二   先预留a个空瓶,将剩余的n-a个空瓶进行换汽水,换的过程中,若空瓶不够a个,则从预留的a个空瓶中“借”,因而,

空瓶换汽水次数:[(n-a)/(a-b)] + 1 = [(n-b)/(a-b)](预留的a个空瓶也能换一次)

最后剩余空瓶: (n-b) % (a-b) + b(预留的a个空瓶换得b瓶汽水)

 

解法三   最后一次空瓶换汽水得到的b瓶汽水,喝完后得到b个空瓶,因而最后剩余空瓶数必然大于b个,先预留b个空瓶,将剩余的n-b个空瓶进行换汽水,若空瓶不够a个,则从预留的b个空瓶中“借”(由于能进行空瓶换汽水,空瓶数>= a – b,因而“借”完后,可以保证空瓶数大等于a),

           空瓶换汽水次数:[(n-b)/(a-b)]

最终剩余空瓶数:b + (n-b) % (a-b)

 

(对解法三,n>=b时结论成立,对解法一、二,可以验证n >=b时,结论也成立)

 

因而, n >= b

空瓶换汽水次数:   [(n-b)/(a-b)]

最后剩余空瓶:     b + (n-b) % (a-b)

总共可以喝到汽水: n + [(n-b)/(a-b)] * b

 

对原题:

 n = 1000a = 3, b = 1 a – b = 2

 若允许借空瓶    

可以喝到汽水: 1000 + 1000 / 2 = 1500

剩余空瓶:1000 % 2 = 0

 

若不允许借空瓶

可以喝到汽水: 1000 + (1000 - 1) / 2 = 1499

剩余空瓶:     1 + (1000 - 1) % 2 = 2

 

 

 

转载于:https://www.cnblogs.com/flyinghearts/archive/2011/09/23/2186593.html

你可能感兴趣的文章
oracel备份
查看>>
微信自动回复中如何添加超链接
查看>>
Left/right join 和inner join 区别
查看>>
spark读取myslq优化--单机版
查看>>
正则替换
查看>>
ubuntu 14.04 lts 安装gogs v0.6.1
查看>>
运维老司机的问题排查经验总结帮你顺利排险
查看>>
报表工具Style Report报表设计器的功能及特点
查看>>
Highcharts 操作series 的data里的数据
查看>>
七个步骤解决面试中的动态规划问题
查看>>
HTML页面和JSP页面禁用缓存
查看>>
Java 并发编程:核心理论
查看>>
Castle.ActiveRecord 多对多关系 引发的错误处理
查看>>
垂直居中的几种实现方法
查看>>
oracle_10g提示Exception in sending Request null的解决方案
查看>>
Android中px, dp, sp之间的转换代码
查看>>
版本管理
查看>>
Unity中光照系统分析
查看>>
滚动到顶部后固定在顶部代码
查看>>
快速排序
查看>>