Assign other value to a variable from two possible values
Last Updated :
06 Mar, 2023
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++
#include <bits/stdc++.h>
using namespace std;
void alternate( int & a, int & b, int & x)
{
x = a + b - x;
}
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
import java.util.*;
class solution
{
static void alternate( int a, int b, int x)
{
x = a + b - x;
System.out.println( "After change" + "\n" + " x is : " +x);
}
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
def alternate(a,b,x):
x = a + b - x
print ( "After change x is:" ,x)
if __name__ = = '__main__' :
a = - 10
b = 15
x = a
print ( "x is:" ,x)
alternate(a,b,x)
|
C#
using System;
class gfg
{
public void alternate( ref int a, ref int b, ref int x)
{
x = a + b - x;
}
}
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;
}
}
|
PHP
<?php
function alternate (& $a , & $b , & $x )
{
$x = $a + $b - $x ;
}
$a = -10;
$b = 15;
$x = $a ;
echo "x is : " , $x ;
alternate( $a , $b , $x );
echo "\nAfter change " ;
echo "\nx is : " , $x ;
?>
|
Javascript
<script>
function alternate(a , b , x) {
x = a + b - x;
document.write( "After change" + "<br/>" + " x is : " + x);
}
var a = -10;
var b = 15;
var x = a;
document.write( "x is : " + x+ "<br/>" );
alternate(a, b, x);
</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++
#include <bits/stdc++.h>
using namespace std;
void alternate( int & a, int & b, int & x)
{
x = a ^ b ^ x;
}
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
class GFG {
static int alternate( int a, int b, int x) {
return x = a ^ b ^ x;
}
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);
}
}
|
Python3
def alternate(a, b, x):
x = a ^ b ^ x
print ( "After exchange" )
print ( "x is" , x)
a = - 10
b = 15
x = a
print ( "x is" , x)
alternate(a, b, x)
|
C#
using System;
public class GFG {
static int alternate( int a, int b, int x) {
return x = a ^ b ^ x;
}
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);
}
}
|
PHP
<?php
function alternate(& $a , & $b , & $x )
{
$x = $a ^ $b ^ $x ;
}
$a = -10;
$b = 15;
$x = $a ;
echo "x is : " , $x ;
alternate( $a , $b , $x );
echo "\nAfter exchange " ;
echo "\nx is : " , $x ;
?>
|
Javascript
<script>
function alternate(a , b , x) {
return x = a ^ b ^ x;
}
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);
</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++
#include <bits/stdc++.h>
using namespace std;
void alternate( int & a, int & b, int & x)
{
x = a * b / x;
}
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
import java.util.*;
public class Main {
public static int alternate( int a, int b, int x) {
x = a * b / x;
return x;
}
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
def alternate(a, b, x):
x = a * b / / x
return x
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#
using System;
public class Program
{
static void alternate( ref int a, ref int b, ref int x)
{
x = a * b / x;
}
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);
}
}
|
Javascript
function alternate(a, b,x )
{
x = a * b / x;
return x;
}
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);
|
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)
Similar Reads
Programming puzzle (Assign value without any control statement)
Given four integers 'a', 'b', 'y' and 'x', where 'x' can only be either zero or one. Your task is as follows: If 'x' is zero assign value 'a' to the variable 'y'If 'x' is one assign value 'b' to the variable 'y'. It is not allowed to use any conditional operator (including the ternary operator). Exa
6 min read
Assigning multiple variables in one line in Python
A variable is a segment of memory with a unique name used to hold data that will later be processed. Although each programming language has a different mechanism for declaring variables, the name and the data that will be assigned to each variable are always the same. They are capable of storing val
2 min read
Count values whose Bitwise OR with A is equal to B
Given two integers A and B, the task is to count possible values of X that satisfies the condition A | X = B. Note: | represents Bitwise OR operation. Examples: Input: A = 2, B = 3Output: 2Explanation: Since, 2 | 1 = 3 and 2 | 3 = 3. Therefore, the possible values of x are 1 and 3. Input: A = 5, B =
6 min read
JavaScript - Swap Two Variables in JavaScript
In this article, we will learn about swapping 2 variables with Various Approaches. Using destructing Assignment - Most UsedHere, we will be using a destructing Assignment. The destructing assignment makes it possible to unpack values from an array, object, or other properties into distinct variables
3 min read
Change bits to make specific OR value
Given two positive integers A and B, we can change at most K bits in both the numbers to make OR of them equal to a given target number T. In the case of multiple solutions try to keep A as small as possible. Examples : Input : A = 175, B = 66, T = 100, K = 5 Output : A = 36 B = 64 Initial bits of A
15 min read
Find if the Vacation can be taken or not
Given are the following values: N which are the number of days left for the exams.S which are the number of subjects to be prepared for the exam.C which are the number of chapters to be prepared for each subject.H which are the number of hours to prepare a chapter.L which are the number of days of d
7 min read
Write a function that returns 2 for input 1 and returns 1 for 2
Write a function which returns 1 that 2 is passed and return 2 when 1 is passed.Source: Adobe Interview Experience | Set 19 (For MTS)A simple solution is to compare the passed value with 1 and 2. C/C++ Code int invert(int x) { if (x == 1) return 2; else return 1; } Java Code static int invert(int x)
3 min read
Find final value of A after alternate AND-OR operations on A and B
Given 3 integers A, B, and N the task is to perform alternate AND-OR operations on A and B, and then assign the result of each operation to A. Find the final value of A Examples: Input: A = 4, B = 5, N = 1Output: 4Explanation: Perform 1 operation i.e A = A & B, therefore A = 4 & 5 = 4Input:
5 min read
Swift - Constants, Variables & Print function
Constants and variables are those elements in a code linked with a particular type of value such as a number, a character, a string, etc. Constants once declared in a code cannot be changed. In comparison, variables can change at any time in a code within the scope. Declaring Constants & Variabl
2 min read
How to Pass Optional Parameters to a Function in Python
In Python, functions can have optional parameters by assigning default values to some arguments. This allows users to call the function with or without those parameters, making the function more flexible. When an optional parameter is not provided, Python uses its default value. There are two primar
5 min read