Giả sử chúng ta có hai bình có dung tích x và y lít. Có vô số nguồn cung cấp nước cho chúng ta. Bây giờ chúng ta cần xác định xem có thể đo chính xác z lít bằng hai bình này hay không. Nếu đo được z lít nước thì cuối cùng chúng ta phải có z lít nước chứa trong một hoặc cả hai thùng.
Chúng tôi có thể thực hiện một số thao tác này -
-
Đổ đầy nước vào bất kỳ bình nào.
-
Làm trống bất kỳ bình nào.
-
Đổ nước từ bình này sang bình khác cho đến khi bình kia đầy hoàn toàn hoặc bình đầu tiên đã cạn.
Vì vậy, nếu x =2 và y =5 và z =4, thì nó sẽ trả về true.
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
-
nếu x + y
-
nếu x =z hoặc y =z hoặc x + y =z thì trả về true
-
trả về true z chia hết cho gcd của x và y, ngược lại là false
Ví dụ (C ++)
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -
#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)); }
Đầu vào
3 5 4
Đầu ra
1