【问题】

已知:N个空瓶可以换 1 瓶酒,
问:若小明买m瓶,那么他最终可以喝到几瓶?

【声明】

  • N为大于 1 的自然数,否则结果为无穷.
  • 不考虑借空瓶的行为.

空瓶换酒问题简单易懂,可以算是学习编程的入门题,只需一个循环即可。本文试图探究,最终的答案与初始 m 是否存在数量关系,及其背后的逻辑。

【法一】给出普通的解法如下

#tol:喝到的瓶数
#emptybottles:现有的酒瓶数
def kphj1(numBottles,numExchange):#初始有numBottles瓶酒,喝完后有同样多数量的酒瓶tol=numBottlesemptybottles=numBottles#当可以换酒时循环while emptybottles>=numExchange:#现有的空瓶可以换到的酒数newwine=emptybottles//numExchange#换完酒剩下的空瓶oldbottles=emptybottles%numExchange  #更新喝到的酒数tol+=newwine#更新现有的空瓶emptybottles=newwine+oldbottlesreturn tol

【法二】考虑酒和空瓶的数量关系
已知N个酒瓶可以换 1 瓶新酒,事实上,当酒喝完后我们又得到一个酒瓶,所以 N∗酒瓶=1∗酒+1∗酒瓶N*酒瓶=1*酒 + 1*酒瓶N∗酒瓶=1∗酒+1∗酒瓶,
也就是(N−1)∗酒瓶=1∗酒.(N-1)*酒瓶=1*酒 .(N−1)∗酒瓶=1∗酒.
不失一般性,假设酒瓶的价值为 1,那么酒的价值是N−1N-1N−1.

于是,我们的问题转化为,我们初始价值为m∗(酒+酒瓶)=mN,m*(酒+酒瓶)=mN,m∗(酒+酒瓶)=mN,最终可以换多少酒?

考虑到最终我们至少剩一个酒瓶在手里,所以我们实际可以利用价值至多为mN−1mN-1mN−1,从而一共可以喝到的酒数为(mN−1)//(N−1).(mN-1)//(N-1).(mN−1)//(N−1).

def kphj2(numBottles,numExchange):return (numBottles*numExchange-1)//(numExchange-1)

时间复杂度O(1).

做出简单的题目不难,但答出简洁的答案需要付出额外的思考。
日拱一卒,功不唐捐。

空瓶换酒问题【一行代码】相关推荐

  1. Python3多思路解决空瓶换酒问题

    思路导航 前言 一.一行代码 二.迭代求解 三.递归求解 总结 前言   空瓶换酒是一类很经典的智力趣题,也有很多不同的问题版本.本文旨在小结其解决方法,以加深理解.   空瓶换酒的目标是求解最终能喝 ...

  2. 经典数学问题“空瓶换酒”求解(C/C++)

    经典数学问题"空瓶换酒":某啤酒店可用a(>0)个空啤酒瓶换b(<a)瓶啤酒,某人一次购买n瓶啤酒,问其最多能够喝多少瓶啤酒? 通常这类问题希望我们要"投机取 ...

  3. Python入门:从空瓶换酒聊起

    Python入门:从空瓶换酒聊起 最近在学习Python的过程中,发现了一道有趣的编程题目--空瓶换酒.这个问题是这样描述的:假设你有m个空瓶子,可以用其中n个空瓶子换一瓶酒.那么,你最终最多能喝到多 ...

  4. 酒瓶换酒编程C语言,巧用公式速解“空瓶换酒”问题

    近年来,公务员考试数学运算部分出题形式越来越灵活,题型方面以极值问题.统筹问题.空瓶换酒等问题为代表.下面广西公务员考试网重点讲解一下"空瓶换酒"的解法. [真题精选]12个啤酒空 ...

  5. 【算法基础】空瓶换酒

    文章目录 空瓶换酒-python实现 1.算法分析 1.1 通常情况 1.2 赊账情况 空瓶换酒-python实现 最近学习学习到一种空瓶换酒的算法,其题目描述为:假设一瓶啤酒2元钱,商家为了促销,规 ...

  6. java编写换酒问题,空瓶换酒问题

    例:某商店出售啤酒,规定每5个空啤酒瓶能换1瓶啤酒.张叔叔家买了80瓶啤酒,喝完后再按规定用空啤酒瓶去换啤酒,那么他们家前后共能喝到多少瓶啤酒? 分析与解:我们按照实际换酒过程分析: 喝掉80瓶啤酒, ...

  7. java编写换酒问题,ASP空瓶换酒递归算法题目

    今天有个朋友问我一个小学生的奥数题,酒1元钱1瓶,2个空瓶子可以换一瓶酒,问20块钱可以喝多少瓶酒.我OUT了,我被鄙视了. 我不会,但是谁让我是写代码的呢,写了个小程序用来鄙视他.告诉他,我不仅知道 ...

  8. #1518空瓶换酒问题

    一.题目 难度:简单 小区便利店正在促销,用 numExchange 个空酒瓶可以兑换一瓶新酒.你购入了 numBottles 瓶酒. 如果喝掉了酒瓶中的酒,那么酒瓶就会变成空的. 请你计算 最多 能 ...

  9. python巧妙解决空瓶换酒问题

    问题: 某超市促销,举办空酒瓶和酒瓶盖换酒活动,规定 2 个空瓶或 4 个瓶盖可换一瓶酒.若小明最开始买了 n 瓶酒,则他总共能喝到多少瓶酒? 思路: 如果瓶子数大于2或盖子数大于4就可以换一瓶酒,而 ...

最新文章

  1. 【TCP/IP详解 卷一:协议】第十九章 TCP的交互数据流
  2. 【算法+图像处理】2D卷积与快速卷积算法C语言实现
  3. java 假设当前时间_Java如何比较当前时间是否在两个时间范围内
  4. VxWorks关于任务创建的几个函数的概述
  5. python twisted和flask_浅谈Python Web 框架:Django, Twisted, Tornado, Flask, Cyclone 和 Pyramid...
  6. 异步复位设计中的亚稳态问题及其解决方案
  7. ZZULIOJ 1093: 验证哥德巴赫猜想(函数专题)
  8. 大数据之-Hadoop3.x_MapReduce_自定义outputformat案例完善执行---大数据之hadoop3.x工作笔记0123
  9. MySQL---主从复制
  10. 请使用webdav_介绍下phpdav的使用功能价值
  11. C# 图像编程 (1) 准备工作; 你好,空姐; 为空姐照片添加特效
  12. 简单介绍.Net3.0 中跨线程访问控件
  13. kafkaStream执行过程中出现TimeoutException异常退出
  14. stm8单片机程序加密方法 id加密技巧
  15. 游戏陪玩小程序开发制作
  16. 摄像头 RTSP 以及远程管理
  17. 网络传输介质和常见的设备
  18. Unity日志输出储存工具
  19. endNote操作教程-2-文献导入到endNote
  20. 机房用计算机桌,机房电脑桌椅的正常尺寸是多少

热门文章

  1. android 自定义view(侧拉删除)
  2. 在真假难辨 骗局横飞的时代 湾湾川生态代表着新零售出现了互联网+实体店
  3. 这是二叉搜索树吗? 天梯赛练习 数据结构瞎做QAQ
  4. 《机器人GPS定位导航小车的制作》
  5. 软件著作权的概念是什么
  6. 应该是史上最全最新Java和Android面试题目(自己总结和收集的)
  7. 定制和我一样的博客园主题
  8. 服务器远程此计算机无法链接到,服务器远程登录不上的处理方法
  9. 《Towards Optimally Decentralized Multi-Robot Collision Avoidance via Deep Reinforcement Learning》译文
  10. 如何通过问卷调查与数据分析创建用户模型