Open In App

Assign other value to a variable from two possible values

Last Updated : 06 Mar, 2023
Comments
Improve
Suggest changes
Like Article
Like
Report

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>

Output: 
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>

Output: 
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)


Next Article

Similar Reads