1、题目描述

有两个容量分别为 x升 和 y升 的水壶以及无限多的水。请判断能否通过使用这两个水壶,从而可以得到恰好 z升 的水?

如果可以,最后请用以上水壶中的一或两个来盛放取得的 z升 水。

你允许:

装满任意一个水壶
清空任意一个水壶
从一个水壶向另外一个水壶倒水,直到装满或者倒空

2、示例

输入: x = 3, y = 5, z = 4
输出: True

3、题解

解法一:

基本思想:递归dfs深度优先搜索,超时,将x与y相减得到的数cur保存至res,然后cur与res中所有数相减得到新的数加入res,这个过程中如果cur=z,则返回true

解法二:

基本思想:数学,贝祖定理,找到x,y的最大公约数能否z被整除

#include<iostream>
#include<vector>
#include<algorithm>
#include<set>
using namespace std;
class Solution {
public:set<int> res;bool canMeasureWater(int x, int y, int z) {//基本思想:递归dfs深度优先搜索,超时//将x与y相减得到的数cur保存至res,然后cur与res中所有数相减得到新的数加入res//这个过程中如果cur=z,则返回trueif(z==x||z==y||x+y==z||z==0)  return true;res.insert(x);res.insert(y);int cur=x>y?x-y:y-x;return dfs(cur,z);}bool dfs(int cur,int z){if(res.find(cur)!=res.end())return false;if(cur==z)return true;for(auto iter=res.begin();iter!=res.end();iter++){if(cur+*iter==z)return true;}res.insert(cur);for(auto iter=res.begin();iter!=res.end();iter++){if(*iter==cur)continue;else if(*iter>cur&&dfs(*iter-cur,z))return true;else if(cur>*iter&&dfs(cur-*iter,z))return true;}return false;}
};
class Solution1 {
public:bool canMeasureWater(int x, int y, int z) {//基本思想:数学,找到x,y的最大公约数能否z被整除if (x + y < z)return false;if (z == 0 || x + y == z)return true;if(x>y) swap(x,y);if(x==0)  return y==z;while(y%x!=0){int temp=x;x=y%x;y=temp;}return z % x == 0;}};
int main()
{Solution1 solute;int x=2,y=6,z=5;cout<<solute.canMeasureWater(x,y,z)<<endl;return 0;
}

365水壶问题(数学)相关推荐

  1. Leetcode.365 水壶问题

    题目链接 Leetcode.365 水壶问题 mid 题目描述 有两个水壶,容量分别为 x和 y升.水的供应是无限的.确定是否有可能使用这两个壶准确得到 z升. 如果可以得到 z升水,最后请用以上水壶 ...

  2. LeetCode 365. 水壶问题

    365. 水壶问题 题目链接-365. 水壶问题 解题思路 裴蜀定理 裴蜀等式:若a,ba,ba,b是整数,且gcd(a,b)=dgcd(a,b)=dgcd(a,b)=d,那么对于任意的整数x,yx, ...

  3. [LeetCode解题报告] 365. 水壶问题

    [LeetCode解题报告] 365. 水壶问题 一. 题目 1. 题目描述 2. 原题链接 二. 解题报告 1. 思路分析 2. 复杂度分析 3. 代码实现 三. 本题小结 一. 题目 1. 题目描 ...

  4. 365. 水壶问题-暴力模拟倒水过程-递归法

    365. 水壶问题-暴力模拟倒水过程-递归法 有两个水壶,容量分别为 jug1Capacity 和 jug2Capacity 升.水的供应是无限的.确定是否有可能使用这两个壶准确得到 targetCa ...

  5. 365 水壶问题(递归、数学-裴蜀定理)

    1. 问题描述: 有两个容量分别为 x升和 y升的水壶以及无限多的水.请判断能否通过使用这两个水壶,从而可以得到恰好z升的水? 如果可以,最后请用以上水壶中的一或两个来盛放取得的z升水. 你允许: 装 ...

  6. 365.水壶问题笔记

    水壶问题 Leetcode题号:365 题目内容 有两个容量分别为 x升 和 y升 的水壶以及无限多的水.请判断能否通过使用这两个水壶,从而可以得到恰好 z升 的水? 如果可以,最后请用以上水壶中的一 ...

  7. 【深度优先+重写hash(C++)】365. 水壶问题

    题目描述 有两个水壶,容量分别为 x 和 y 升.水的供应是无限的.确定是否有可能使用这两个壶准确得到 target 升. 如果可以得到 target 升水,最后请用以上水壶中的一或两个来盛放取得的 ...

  8. leetcode 365. Water and Jug Problem | 365. 水壶问题(Java)

    题目 https://leetcode.com/problems/water-and-jug-problem/ 又是踩比赞多的一道题-我认为有两个可能的原因: 虽然通过了,但原理不明了. 本质是个数学 ...

  9. LeetCode 365. 水壶问题(最大公约数)

    文章目录 1. 题目 2. 最大公约数 1. 题目 有两个容量分别为 x升 和 y升 的水壶以及无限多的水.请判断能否通过使用这两个水壶,从而可以得到恰好 z升 的水? 如果可以,最后请用以上水壶中的 ...

最新文章

  1. IIS负载均衡-Application Request Route详解第三篇:使用ARR进行Http请求的负载均衡(上)...
  2. 队列——PowerShell版
  3. 计算机程序输入x是3求输出七年级的题,如图所示是计算机程序计算,若开始输入,则最后输出的结果是  ▲  .  ——青夏教育精英家教网——...
  4. Transaction rolled back because it has been marked as rollback-only
  5. 安卓进阶系列-05列表控件(RecyclerView)的使用
  6. 【热点报道】2013eoe移动开发者大会圆满落幕
  7. 【BootStrap】 概述 CSS
  8. Android_Jar mismatch! Fix your dependencies
  9. 【Flink】ValidationException: Could not find any factory for identifier json
  10. java unicode32_【JAVA SE基础篇】32.String类入门
  11. df 根据文件名找到挂载点原理
  12. oracle用户登录提示: user test lacks create session privilege logon denied
  13. 互联网常见的大数据分析指标
  14. DX11 游戏开发笔记 (二) DX11 基础框架 上
  15. PDF怎么转换成Excel?转后一页一个子表怎么合并?
  16. C语言程序设计(第三版)何钦铭著 习题5-3
  17. django重置密码发送html邮件,django 开发忘记密码通过邮箱找回功能示例
  18. 国产开源优秀新一代MPP数据库StarRocks入门之旅-数仓新利器(上)
  19. 今日,首款国产超小体积5G通信模组商用!
  20. 【1072】鸡尾酒疗法

热门文章

  1. TensorFlow之文本分类算法-3
  2. 联想微型计算机c5606,中小企业入门级服务器首选联想万全R510
  3. 第二讲:认识颜色符号或绘图函数
  4. 介绍一款密码分析软件cap4
  5. 图书管理系统(sql版)
  6. 镜头选择基础和视觉系统
  7. 微信小程序毕业设计选题和毕业论文怎么写,答辩流程是怎样的?
  8. 性能测试之nmon对linux服务器的监控
  9. 从单片机到嵌入式开发——(6) 定时器与串口中断
  10. 希望,所有珍惜都不需要靠失去才懂得