| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 买矿泉水,空瓶,瓶盖,再兑换矿泉水类问题 -> 正文阅读 |
|
[数据结构与算法]买矿泉水,空瓶,瓶盖,再兑换矿泉水类问题 |
听到这个,是否有些感触?是否见过这一类的题目? 实际上这种题,并不困难...... 看个例题叭:你有十块钱,矿泉水两块钱一瓶,四个瓶盖换一瓶,两个空瓶换一瓶,你能买多少瓶矿泉水?没错,短短几句话,实则一道深奥的数学题 这道题有许多解法,“通往罗马的路不止一条” 方程实现:我们可以通过数学方程来解决这道题: 设使用空瓶兑换到的瓶数为X(整数) 设使用空瓶兑换到的瓶数为Y(整数) 则总瓶数为5+X+Y 可列出二元一次不等式组: 1、 设Y=1,由公式2求出则X={0,1},将X,Y带入公式1,不符合(舍去) 2、 设Y=2,由公式2求出则X={1,2,3,4},将X,Y带入公式1,不符合(舍去) 3、 设Y=3,由公式2求出则X={4,5,6,7},将X,Y带入公式1,求解X=7 所以一共喝了5+X+Y=5+3+7=15(瓶) 看,解决了!!! 但是......若是给你很多钱,或者直接给你原来有好多瓶,例如1000元,100000瓶,这再去列二元一次不等式组显然不太行得通...... 所以,这就要用到更高级的算法,运用到C++代码操作 代码实现:我们可以通过代码来实现计算: 为了程序更灵活,我们可以读入任意金额:
表示花光这些钱,可以得到a/2个空瓶,也就有a/2个瓶盖,喝了a/2瓶水,所有的量定义完了之后,我们就要想下面部分了 每次都有可能再兑换到水,这将会直接影响空瓶的数量以及瓶盖都数量 所以,这就要用到while循环 看看题目:四个瓶盖换一瓶,两个空瓶换一瓶 所以,只要b>=2或者c>=4,就会衍生出许多情况,故循环条件就是b>=2或者c>=4,然后再继续循环查看
继续查看,如果瓶盖大于4个,就会消耗4个瓶盖,再获得一瓶矿泉水,因此产生一个空瓶和一个瓶盖;如果空瓶大于2个,就会消耗2个空瓶,再获得一瓶矿泉水,因此产生一个空瓶和一个瓶盖
只要走到最后b>=2或者c>=4,意思就是还能换,就会再走一遍,直到两个条件都不成立,不能再换为止 最后只要输出sum,喝了几瓶就行啦
?完整代码:
运行效果:这样,这道例题就解决啦(若是直接给的瓶子数量,稍作修改即可,这里就不再赘述) (当然,这是不存在“借”这个行为,否则另外讨论计算) 简便算法实现:运用递推迭代算法: 喝的总瓶数m=4*初次瓶数k-5 这里的k再这道题就是b(a/2),即是买光钱所得到的瓶数 这么一看,是不是就特别easy? 至此,这一类问题你已经会做了,还有更多更巧妙的算法,就不再一一说明了总结:这是一道相对简单,贴近生活的一道数学逻辑题,运用方程,代码,算法.....都可以实现解答 补充:其中有一个规律,即最后总会剩下3个瓶盖,1个空瓶 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 18:42:06- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |