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