두 개의 숫자 c와 d가 있다고 가정합니다. Amal에는 두 개의 숫자가 있고 b는 처음에는 둘 다 0입니다.Amal은 이 숫자에 대해 몇 가지 작업을 수행하려고 합니다. 각 연산을 수행하기 전에 양의 정수 k가 선택되어 다음 연산 중 하나를 수행하는 데 사용됩니다. -
-
와 b 모두에 숫자 k를 추가하거나
-
숫자 k를 b에 더하고 b에서 k를 빼거나
-
b에 숫자 k를 더하고 k를 빼십시오.
우리는 a와 b를 c와 같게 만드는 데 필요한 최소 연산 수를 찾아야 합니다. 가능하지 않으면 -1을 반환합니다.
따라서 입력이 c =3과 같으면; d =5이면 출력은 2가 됩니다. 왜냐하면 k =1의 경우 숫자 (1, 1)을 얻고 k =8의 경우 쌍은 (-7, 9)가 될 수 있고 k =7의 경우 다음과 같을 수 있기 때문입니다. (0, 2) 및 k =3의 경우(3, 5)
단계
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
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
예
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
#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; }
입력
3, 5
출력
2