Assign other value to a variable from two possible values - GeeksforGeeks

05 May, 2021
Suppose a variable x can have only two possible values a and b, and you wish to assign to x the value other than its current one. Do it efficiently without using any conditional operator.Note: We are not allowed to check current value of x. Examples:  
Input : a = 10, b = 15, x = a Output : x = 15 Explanation x = 10, currently x has value of a (which is 10), we need to change it to 15.Input : a = 9, b = 11, x = b Output : x = 9
We could solve this problem using if condition, but we are not allowed to do that.
if (x == a) 
   x = b;
else x = a;
We could have used Ternary operator, it also checks the current value of x and based on that it assigns new value. So we cannot use this approach as well 
x = x == a ? b : a;
But, we are not allowed to check value of x, so none of the above solutions work.Solution 1: Using arithmetic operators only we can perform this operation  
x = a + b - x
This way the content of x will alternate between a and b every time it gets executed 
C++
Java
Python3
C#
PHP
Javascript
// CPP program to change value of x// according to its current value.#include <bits/stdc++.h>using namespace std; // Function to alternate the valuesvoid alternate(int& a, int& b, int& x){    x = a + b - x;} // Main functionint main(){    int a = -10;    int b = 15;    int x = a;    cout << "x is : " << x;     alternate(a, b, x);     cout << "\nAfter change ";    cout << "\nx is : " << x;}
// Java program to change value of x// according to its current value.import java.util.*; class solution{ // Function to alternate the valuesstatic void alternate(int a, int b, int x){    x = a + b - x;    System.out.println("After change"+"\n"+" x is : "+x);} // Main functionpublic static void main(String args[]){    int a = -10;    int b = 15;    int x = a;    System.out.println("x is : "+x);    alternate(a, b, x);}}
# Python3 program to change value# of x according to its current value. # Function to alternate the valuesdef alternate(a,b,x):    x = a+b-x    print("After change x is:",x)  # Driver codeif __name__=='__main__':    a = -10    b = 15    x = a    print("x is:",x)    alternate(a,b,x) # This code is contributed by# Shrikant13
// C# program to change value of x// according to its current value. using System;class gfg{ // Function to alternate the values public void alternate(ref int a, ref int b, ref int x)   //'ref' indicates the references {    x = a + b - x; }} // Main functionclass geek{ public static int Main() {    gfg g = new gfg();    int a = -10;    int b = 15;    int x = a;    Console.WriteLine("x is : {0}" , x);     g.alternate(ref a, ref b, ref x);     Console.WriteLine ("After change ");    Console.WriteLine("x is : {0}", x);    return 0; }}//This code is contributed by Soumik
<?php// PHP program to change value of x// according to its current value. // Function to alternate the valuesfunction alternate (&$a, &$b, &$x){    $x = $a + $b - $x;} // Driver Code$a = -10;$b = 15;$x = $a;echo "x is : ", $x; alternate($a, $b, $x); echo "\nAfter change ";echo "\nx is : ", $x; // This code is contributed by ajit.?>
<script>// javascript program to change value of x// according to its current value.     // Function to alternate the values    function alternate(a , b , x) {        x = a + b - x;        document.write("After change" + "<br/>" + " x is : " + x);    }     // Main function             var a = -10;        var b = 15;        var x = a;        document.write("x is : " + x+"<br/>");        alternate(a, b, x); // This code is contributed by todaysgaurav</script>
x is : -10
After change 
x is : 15
 
Time Complexity: The time complexity of this approach is O(1) Space Complexity: The space complexity of this approach is O(1)Solution 2: A better and efficient approach is using the bitwise XOR operation.x = a^b^x 
C++
Java
Python3
C#
PHP
Javascript
// CPP program to change value of x// according to its current value.#include <bits/stdc++.h>using namespace std; // Function to alternate the valuesvoid alternate(int& a, int& b, int& x){    x = a ^ b ^ x;} // Main functionint main(){    int a = -10;    int b = 15;    int x = a;    cout << "x is : " << x;     alternate(a, b, x);     cout << "\nAfter exchange ";    cout << "\nx is : " << x;         return 0;}
// Java program to change value of x// according to its current value. class GFG {// Function to alternate the values     static int alternate(int a, int b, int x) {        return x = a ^ b ^ x;    } // Main function    public static void main(String[] args) {        int a = -10;        int b = 15;        int x = a;        System.out.print("x is : " + x);         x = alternate(a, b, x);         System.out.print("\nAfter exchange ");        System.out.print("\nx is : " + x);     }} // This code is contributed by 29AjayKumar
# Python3 program to change value of x# according to its current value. # Function to alternate the valuesdef alternate(a, b, x):    x = a ^ b ^ x    print("After exchange")    print("x is", x) # Driver codea = -10b = 15x = aprint("x is", x)alternate(a, b, x) # This code is contributed# by Shrikant13
     // C# program to change value of x// according to its current value.using System;public class GFG {// Function to alternate the values     static int alternate(int a, int b, int x) {        return x = a ^ b ^ x;    } // Main function    public static void Main() {        int a = -10;        int b = 15;        int x = a;        Console.Write("x is : " + x);         x = alternate(a, b, x);         Console.Write("\nAfter exchange ");        Console.Write("\nx is : " + x);     }}/*This code is contributed by Rajput-Ji*/
<?php// PHP program to change value of x// according to its current value. // Function to alternate the valuesfunction alternate(&$a, &$b, &$x){    $x = $a ^ $b ^ $x;} // Driver Code$a = -10;$b = 15;$x = $a;echo "x is : ", $x; alternate($a, $b, $x); echo "\nAfter exchange ";echo "\nx is : ", $x; // This code is contributed// by akt_mit?>
<script> // Javascript program to change value of x// according to its current value. // Function to alternate the values     function alternate(a , b , x) {        return x = a ^ b ^ x;    }     // Main function             var a = -10;        var b = 15;        var x = a;        document.write("x is : " + x);         x = alternate(a, b, x);         document.write("<br/>After exchange ");        document.write("<br/>x is : " + x);  // This code contributed by Rajput-Ji </script>
x is : -10
After exchange 
x is : 15
 
Time Complexity: The time complexity of this approach is O(1) Space Complexity: The space complexity of this approach is O(1) 
shrikanth13
SoumikMondal
SURENDRA_GANGWAR
29AjayKumar
Rajput-Ji
jit_t
todaysgaurav
Bitwise-OR
programming-puzzle
Technical Scripter 2018
Bit Magic
Technical Scripter
Bit Magic
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Set, Clear and Toggle a given bit of a number in C
Find the size of Largest Subset with positive Bitwise AND
Check whether bitwise AND of a number with any subset of an array is zero or not
Write an Efficient Method to Check if a Number is Multiple of 3
Highest power of 2 less than or equal to given number
Swap two nibbles in a byte
Swap bits in a given number
Check for Integer Overflow
Reverse actual bits of the given number
Find one extra character in a string