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++
// CPP program to change value of x // according to its current value. #include <bits/stdc++.h> using namespace std; // Function to alternate the values void alternate( int & a, int & b, int & x) { x = a + b - x; } // Main function int 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
// Java program to change value of x // according to its current value. import java.util.*; class solution { // Function to alternate the values static void alternate( int a, int b, int x) { x = a + b - x; System.out.println( "After change" + "\n" + " x is : " +x); } // Main function public 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
# Python3 program to change value # of x according to its current value. # Function to alternate the values def alternate(a,b,x): x = a + b - x print ( "After change x is:" ,x) # Driver code if __name__ = = '__main__' : a = - 10 b = 15 x = a print ( "x is:" ,x) alternate(a,b,x) # This code is contributed by # Shrikant13 |
C#
// 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 function class 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 // PHP 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 ; } // 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. ?> |
Javascript
<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++
// CPP program to change value of x // according to its current value. #include <bits/stdc++.h> using namespace std; // Function to alternate the values void alternate( int & a, int & b, int & x) { x = a ^ b ^ x; } // Main function int 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
// 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
# Python3 program to change value of x # according to its current value. # Function to alternate the values def alternate(a, b, x): x = a ^ b ^ x print ( "After exchange" ) print ( "x is" , x) # Driver code a = - 10 b = 15 x = a print ( "x is" , x) alternate(a, b, x) # This code is contributed # by Shrikant13 |
C#
// 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 // PHP 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 ; } // 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 ?> |
Javascript
<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)
Solution 3:
Using the multiplication operator, we can perform the operation:
x = a * b / x
This way the content of x will alternate between a and b.
This approach has only one step:
Step 1: x = a * b / x
C++
// CPP program to change value of x // according to its current value. #include <bits/stdc++.h> using namespace std; // Function to alternate the values void alternate( int & a, int & b, int & x) { x = a * b / x; } // Main function int 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; } //This code is contributed by phasing17 |
Java
import java.util.*; public class Main { // Function to alternate the values public static int alternate( int a, int b, int x) { x = a * b / x; return x; } // Main function public static void main(String[] args) { int a = - 10 ; int b = 15 ; int x = a; System.out.println( "x is : " + x); x=alternate(a, b, x); System.out.println( "\nAfter change " ); System.out.println( "x is : " + x); } } |
Python3
# Function to alternate the values def alternate(a, b, x): x = a * b / / x return x # Main function def main(): a = - 10 b = 15 x = a print ( "x is :" , x) x = alternate(a, b, x) print ( "\nAfter change " ) print ( "x is :" , x) if __name__ = = '__main__' : main() |
C#
// C# program to change value of x // according to its current value. using System; public class Program { // Function to alternate the values static void alternate( ref int a, ref int b, ref int x) { x = a * b / x; } // Main function public static void Main() { int a = -10; int b = 15; int x = a; Console.WriteLine( "x is : " + x); alternate( ref a, ref b, ref x); Console.WriteLine( "\nAfter change " ); Console.WriteLine( "x is : " + x); } } // This code is contributed by bhardwajji |
Javascript
// 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; return x; } // Main function let a = -10; let b = 15; let x = a; console.log( "x is : " + x); x = alternate(a, b, x); console.log( "After change " ); console.log( "x is : " + x); // This code is contributed by phasing17 |
Output:
x is : -10 After exchange x is : 15
Time Complexity: The time complexity of this approach is O(1)
Auxiliary Space: The space complexity of this approach is O(1)
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!