zoukankan      html  css  js  c++  java
  • 【Leetcode】水壶问题(每日一题)

    题目链接:水壶问题


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

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

    你允许:

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


    题解:有一个定理叫做裴蜀定理。熟悉数论的应该都知道这个定理。

    对任何整数 a、b和它们的最大公约数 d ,关于未知数 x 和 y 的线性丢番图方程。

    有一个最著名的推论就是:ab互质的充要条件是存在整数x,y使得ax+by = 1

    而这个题就是这个定理的运用。只要满足z%gcd(a,b) == 0即可。

    (吐槽一下样例,给了0,0,0和1,0,0我不知道是个什么鬼。。脱离实际情况出数据可还行。)

    还有一定要满足x+y >= z


    代码:

     1 class Solution {
     2 public:
     3     int gcd(int a,int b){
     4         if(b == 0)  return a;
     5         return gcd(b,a%b);
     6     }
     7     bool canMeasureWater(int x, int y, int z) {
     8         if(x == 0)  return y == z;
     9         if(z == 0)  return true;
    10         if(x+y < z) return false;
    11 
    12         int ans = gcd(x,y);
    13 
    14         if(z%ans)   return false;
    15         else    return true;
    16     }
    17 };
  • 相关阅读:
    Java自学
    java自学
    Java自学
    每日总结
    每日总结
    每日总结
    每日总结
    每日总结
    每日总结
    每日总结
  • 原文地址:https://www.cnblogs.com/Asumi/p/12541952.html
Copyright © 2011-2022 走看看