水壺問題 C++


假設我們有兩個容量為 x 升和 y 升的水壺。供應給我們的是無限量的水。現在,我們需要確定是否が可能,僅使用這兩個水壺量出 z 升水。如果能夠量出 z 升的水,那麼到最後,其中一隻水壺或兩隻水壺中必定裝有 z 升水。

我們可以執行以下幾個操作 -

  • 將其中一隻水壺灌滿水。

  • 清空其中一隻水壺。

  • 將一隻水壺中的水倒入另一隻水壺,直到另一隻水壺被完全灌滿水或第一隻水壺被清空。

因此,如果 x = 2 且 y = 5,以及 z = 4,那麼它將返回 true。

為了解決此問題,我們將按照以下步驟進行 -

  • if x + y < z,則返回 false

  • if x = z 或者 y = z,或者 x + y = z,則返回 true

  • if z 整除 x 和 y 的最大公約數,則返回 true,否則返回 false

示例 (C++)

為了幫助我們更好地理解,讓我們看下面的實現 -

 線上演示

#include <bits/stdc++.h&g;
using namespace std;
class Solution {
   public:
   bool canMeasureWater(int x, int y, int z) {
      if(x + y < z) return false;
      if(x == z || y == z || x + y == z) return true;
      return z % __gcd(x, y) == 0;
   }
};
main(){
   Solution ob;
   cout << (ob.canMeasureWater(3,5,4));
}

輸入

3
5
4

輸出

1

更新日期: 02-5-2020

2 千+ 次瀏覽

開啟你的職業生涯

完成課程,獲得認證

開始
廣告