空瓶换酒问题【一行代码】
【问题】
已知: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).
做出简单的题目不难,但答出简洁的答案需要付出额外的思考。
日拱一卒,功不唐捐。
空瓶换酒问题【一行代码】相关推荐
- Python3多思路解决空瓶换酒问题
思路导航 前言 一.一行代码 二.迭代求解 三.递归求解 总结 前言 空瓶换酒是一类很经典的智力趣题,也有很多不同的问题版本.本文旨在小结其解决方法,以加深理解. 空瓶换酒的目标是求解最终能喝 ...
- 经典数学问题“空瓶换酒”求解(C/C++)
经典数学问题"空瓶换酒":某啤酒店可用a(>0)个空啤酒瓶换b(<a)瓶啤酒,某人一次购买n瓶啤酒,问其最多能够喝多少瓶啤酒? 通常这类问题希望我们要"投机取 ...
- Python入门:从空瓶换酒聊起
Python入门:从空瓶换酒聊起 最近在学习Python的过程中,发现了一道有趣的编程题目--空瓶换酒.这个问题是这样描述的:假设你有m个空瓶子,可以用其中n个空瓶子换一瓶酒.那么,你最终最多能喝到多 ...
- 酒瓶换酒编程C语言,巧用公式速解“空瓶换酒”问题
近年来,公务员考试数学运算部分出题形式越来越灵活,题型方面以极值问题.统筹问题.空瓶换酒等问题为代表.下面广西公务员考试网重点讲解一下"空瓶换酒"的解法. [真题精选]12个啤酒空 ...
- 【算法基础】空瓶换酒
文章目录 空瓶换酒-python实现 1.算法分析 1.1 通常情况 1.2 赊账情况 空瓶换酒-python实现 最近学习学习到一种空瓶换酒的算法,其题目描述为:假设一瓶啤酒2元钱,商家为了促销,规 ...
- java编写换酒问题,空瓶换酒问题
例:某商店出售啤酒,规定每5个空啤酒瓶能换1瓶啤酒.张叔叔家买了80瓶啤酒,喝完后再按规定用空啤酒瓶去换啤酒,那么他们家前后共能喝到多少瓶啤酒? 分析与解:我们按照实际换酒过程分析: 喝掉80瓶啤酒, ...
- java编写换酒问题,ASP空瓶换酒递归算法题目
今天有个朋友问我一个小学生的奥数题,酒1元钱1瓶,2个空瓶子可以换一瓶酒,问20块钱可以喝多少瓶酒.我OUT了,我被鄙视了. 我不会,但是谁让我是写代码的呢,写了个小程序用来鄙视他.告诉他,我不仅知道 ...
- #1518空瓶换酒问题
一.题目 难度:简单 小区便利店正在促销,用 numExchange 个空酒瓶可以兑换一瓶新酒.你购入了 numBottles 瓶酒. 如果喝掉了酒瓶中的酒,那么酒瓶就会变成空的. 请你计算 最多 能 ...
- python巧妙解决空瓶换酒问题
问题: 某超市促销,举办空酒瓶和酒瓶盖换酒活动,规定 2 个空瓶或 4 个瓶盖可换一瓶酒.若小明最开始买了 n 瓶酒,则他总共能喝到多少瓶酒? 思路: 如果瓶子数大于2或盖子数大于4就可以换一瓶酒,而 ...
最新文章
- 【TCP/IP详解 卷一:协议】第十九章 TCP的交互数据流
- 【算法+图像处理】2D卷积与快速卷积算法C语言实现
- java 假设当前时间_Java如何比较当前时间是否在两个时间范围内
- VxWorks关于任务创建的几个函数的概述
- python twisted和flask_浅谈Python Web 框架:Django, Twisted, Tornado, Flask, Cyclone 和 Pyramid...
- 异步复位设计中的亚稳态问题及其解决方案
- ZZULIOJ 1093: 验证哥德巴赫猜想(函数专题)
- 大数据之-Hadoop3.x_MapReduce_自定义outputformat案例完善执行---大数据之hadoop3.x工作笔记0123
- MySQL---主从复制
- 请使用webdav_介绍下phpdav的使用功能价值
- C# 图像编程 (1) 准备工作; 你好,空姐; 为空姐照片添加特效
- 简单介绍.Net3.0 中跨线程访问控件
- kafkaStream执行过程中出现TimeoutException异常退出
- stm8单片机程序加密方法 id加密技巧
- 游戏陪玩小程序开发制作
- 摄像头 RTSP 以及远程管理
- 网络传输介质和常见的设备
- Unity日志输出储存工具
- endNote操作教程-2-文献导入到endNote
- 机房用计算机桌,机房电脑桌椅的正常尺寸是多少
热门文章
- android 自定义view(侧拉删除)
- 在真假难辨 骗局横飞的时代 湾湾川生态代表着新零售出现了互联网+实体店
- 这是二叉搜索树吗? 天梯赛练习 数据结构瞎做QAQ
- 《机器人GPS定位导航小车的制作》
- 软件著作权的概念是什么
- 应该是史上最全最新Java和Android面试题目(自己总结和收集的)
- 定制和我一样的博客园主题
- 服务器远程此计算机无法链接到,服务器远程登录不上的处理方法
- 《Towards Optimally Decentralized Multi-Robot Collision Avoidance via Deep Reinforcement Learning》译文
- 如何通过问卷调查与数据分析创建用户模型