Computer >> Máy Tính >  >> Lập trình >> C ++

Vấn đề nước và bình trong C ++


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