Giả sử chúng ta có hai số c và d. Amal có hai số a và b ban đầu cả hai đều bằng không ,mal muốn thực hiện một số phép toán trên chúng. Trước khi thực hiện mỗi thao tác, một số nguyên dương k nào đó được chọn, sau đó được sử dụng để thực hiện một trong các thao tác sau -
-
thêm số k vào cả a và b hoặc
-
cộng số k với a và trừ k với b hoặc
-
cộng số k với b và trừ k với a.
Chúng ta phải tìm số phép toán tối thiểu cần thiết để làm cho a và b bằng c và một cách thận trọng. Nếu không thể, hãy trả về -1.
Vì vậy, nếu đầu vào giống như c =3; d =5, thì đầu ra sẽ là 2, vì với k =1, chúng ta nhận được các số sau đó (1, 1), với k =8, cặp có thể là (-7, 9), với k =7, nó có thể là (0, 2) và đối với k =3, nó có thể là (3, 5)
Các bước
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
if (c ^ d) is odd, then: return -1 otherwise when c is same as 0 and d is same as 0, then: return 0 otherwise when c is same as d, then: return 1 Otherwise return 2
Ví dụ
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -
#include <bits/stdc++.h> using namespace std; int solve(int c, int d){ if ((c ^ d) & 1) return -1; else if (c == 0 && d == 0) return 0; else if (c == d) return 1; else return 2; } int main(){ int c = 3; int d = 5; cout << solve(c, d) << endl; }
Đầu vào
3, 5
Đầu ra
2