水壺問題 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
廣告