문제 설명
조건 연산자를 사용하지 않고 두 개의 가능한 값에서 다른 변수의 값을 변수에 할당해야 합니다.
설명
이 문제에서는 두 변수 x와 y 중 하나의 값을 가질 수 있는 변수 a가 주어집니다. 이제 조건 연산자를 사용하지 않고 현재 값이 아닌 다른 값을 할당하는 프로그램을 만들어야 합니다. 즉, x의 값을 확인할 수 없습니다.
문제를 더 잘 이해하기 위해 예를 들어 보겠습니다 -
Input : a = 43 ; x = 43 and y = 21 Output : 21
설명 - 의 초기 값은 43이므로 다른 값, 즉 21을 a의 최종 값으로 반환해야 합니다.
우리는 값을 확인할 수 없기 때문에 즉, 어떤 종류의 조건문의 사용도 코드에서 유효하지 않습니다. 따라서 변수의 스왑 값에 대한 대체 솔루션을 찾아야 합니다. 이를 위해 여러 솔루션이 있을 수 있지만 여기에서 가장 실현 가능하고 쉬운 방법에 대해 논의합니다. −
산술 연산자 사용
값을 교환하는 쉬운 방법 중 하나는 두 값의 더하기/곱하기를 사용하고 반대 연산에 대해 빼기/나누기입니다. 예를 들어 더하기를 수행한 경우 빼기를 사용하고 곱하기를 사용하는 경우 나누기를 수행합니다.
따라서 공식은 -
가 됩니다.a =x + y - a 또는 a =x * y / a
그러나 여기에서 곱하기 및 나누기 작업은 비용이 더 많이 들고 때때로 오류가 발생할 수 있습니다. 그래서 덧셈 - 뺄셈 콤보를 사용했습니다.
예시
#include <iostream> using namespace std; int main(){ int x = 45; int y = 5; int a = x; cout<<"Initial value of a is : "<<a; a = x+y - a; cout<<"\nAfter changing the value of a is : "<<a; }
출력
Initial value of a is : 45 After changing the value of a is : 5
비트 XOR 연산자 사용
보다 효과적인 방법은 비트 XOR 연산자를 사용하는 것입니다.
따라서 값은 다음과 같이 변경됩니다. -
a =x^y^a;
예
#include <iostream> using namespace std; int main(){ int x = 56; int y = 78; int a = x; cout<<"Initial value of a is : "<< a; a = x^y^a; cout<<"\nAfter changing the value of a is "<<a; return 0; }
출력
Initial value of a is : 56 After changing the value of a is 78