IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 两个杯子倒水问题 -> 正文阅读

[数据结构与算法]两个杯子倒水问题

问题是什么:

现在只有两只杯子AB,容量分别是:M升和N升,在只用这两个杯子的前提下,怎样操作可以得到K升水?

分析问题的过程:

明确能够获得的信息:

问题中的参数

先来明确一下问题中总共有几个参数:

首先能够确定的是两个常量AB的容量:M和N;(M ? \geqslant ?N)

我们将一个杯子为空,一个杯子非空时看作为一次测量的结束。问题让我们求解的结果K(0 ? \leqslant ?K ? \leqslant ?M)就可以看作是结束完某次测量后中有水水杯中存储水的体积。而我们可以设结束完一次测量后有水容器中存储水的体积为X(0 ? \leqslant ?X ? \leqslant ?M)

最后还有两个不易发现的参数:AB水杯分别中剩余空间的大小,我们可以设他们分别为: Y A ( 0 ? Y A ? M ) , Y B ( 0 ? Y B ? N ) Y_A(0\leqslant Y_A \leqslant M),Y_B(0\leqslant Y_B \leqslant N) YA?(0?YA??M),YB?(0?YB??N)

测量水方法的总结和分析

方法总结

要解决这个问题最重要的便是如何通过两个水杯测量。一般有三种方法:

第一种方法( F 1 F_1 F1?)是:在不注入新水的情况下,通过将储存在容量为M杯子中储存的水 X 旧 X_旧 X?,倒满容量为N的空杯子,来获得 X 新 X_新 X?。由此可知:

  1. X 新 = X 旧 ? N X_新=X_旧-N X?=X??N
  2. N ? X 旧 ? M N \leqslant X_旧 \leqslant M N?X??M
  3. 0 < X 新 ? M ? N 0 < X_新 \leqslant M-N 0<X??M?N;

第二种和第三种方法均为,通过新水注满一个杯子后,将杯中一部分水倒满因存有 X 旧 X_旧 X?而改变的另外一个杯子的剩余空间Y,来获得 X 新 X_新 X?

注满的杯子的容量为M的情况下( F 2 F_2 F2?),我们可以得到:

  1. X 新 = M ? Y B = M ? ( N ? X 旧 ) = X 旧 + ( M ? N ) X_新=M-Y_B=M-(N-X_旧)=X_旧+(M-N) X?=M?YB?=M?(N?X?)=X?+(M?N)
  2. 0 ? X 旧 ? N 0 \leqslant X_旧 \leqslant N 0?X??N
  3. M ? N ? X 新 ? M M-N\leqslant X_新 \leqslant M M?N?X??M

注满的杯子的容量为N的情况下( F 3 F_3 F3?),我们可以得到:

  1. X 新 = N ? Y B = M ? ( M ? X 旧 ) = X 旧 ? ( M ? N ) X_新=N-Y_B=M-(M-X_旧)=X_旧-(M-N) X?=N?YB?=M?(M?X?)=X??(M?N)
  2. M ? N ? X 旧 ? M M-N \leqslant X_旧 \leqslant M M?N?X??M
  3. 0 ? X 新 ? N 0\leqslant X_新 \leqslant N 0?X??N

初始情况的分析

因为初始情况时X=0,所以只能进行 F 2 F_2 F2?

方法分析

我们不难发现 F 2 F_2 F2? F 3 F_3 F3?互为逆过程,又因为初始情况只能进行 F 2 F_2 F2?,所以 F 3 F_3 F3?对整体测量没有作用,因此对整体测量来说只有 F 1 F_1 F1? F 2 F_2 F2?起作用。

结论

最终我们发现只需要判断 F 1 F_1 F1? F 2 F_2 F2?进行的次数即可,即a(M-N)-bN=K中次数a,b的值。

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-02-19 01:25:35  更:2022-02-19 01:26:48 
 
开发: 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 15:26:45-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码