从C ++中的两个可能值向变量分配其他值

问题陈述

我们必须从两个可能的值中为一个变量分配其他变量的值,而无需使用任何条件运算符。

描述

在这个问题中,我们给了一个变量,假设a可以具有两个变量x和y中任何一个的值。现在,我们必须创建一个程序来分配另一个值而不是当前值,而不使用任何条件运算符,即我们无法检查x的值。

让我们举个例子来更好地理解问题-

Input : a = 43 ; x = 43 and y = 21
Output : 21

说明-a的初始值为43,因此我们需要返回另一个值,即21作为a的最终值。

由于不允许我们检查ie的值,因此在代码中使用任何类型的条件语句都是无效的。因此,我们需要查看变量交换值的替代解决方案。为此,可以有多种解决方案,但是我们在这里讨论了最可行,最简单的方法-

使用算术运算符

交换值的一种简单方法是使用两个值的加法/乘法,并对各自相反的操作进行减法/除法,即如果进行了加法则减法,如果使用乘法则除法。

因此,公式变为-

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