Input: A array arr[] of two elements having value 0 and 1
Output: Make both elements 0.
Specifications: Following are the specifications to follow.
1) It is guaranteed that one element is 0 but we do not know its position.
2) We can’t say about another element it can be 0 or 1.
3) We can only complement array elements, no other operation like and, or, multi, division, …. etc.
4) We can’t use if, else and loop constructs.
5) Obviously, we can’t directly assign 0 to array elements.
There are several ways we can do it as we are sure that always one Zero is there. Thanks to devendraiiit for suggesting following 3 methods.
Method 1
C++
#include <bits/stdc++.h>
using namespace std;
void changeToZero( int a[2])
{
a[ a[1] ] = a[ !a[1] ];
}
int main()
{
int a[] = {1, 0};
changeToZero(a);
cout<< "arr[0] = " <<a[0]<<endl;
cout<< " arr[1] = " <<a[1];
return 0;
}
|
C
void changeToZero( int a[2])
{
a[ a[1] ] = a[ !a[1] ];
}
int main()
{
int a[] = {1, 0};
changeToZero(a);
printf ( " arr[0] = %d \n" , a[0]);
printf ( " arr[1] = %d " , a[1]);
getchar ();
return 0;
}
|
Java
import java.io.*;
class GFG{
public static void changeToZero( int a[])
{
a[a[ 1 ]] = a[ 1 - a[ 1 ]];
}
public static void main(String args[])
{
int [] arr;
arr = new int [ 2 ];
arr[ 0 ] = 1 ;
arr[ 1 ] = 0 ;
changeToZero(arr);
System.out.println( "arr[0]= " + arr[ 0 ]);
System.out.println( "arr[1]= " + arr[ 1 ]);
}
}
|
Python3
def changeToZero(a):
a[ a[ 1 ] ] = a[ not a[ 1 ] ]
return a
if __name__ = = '__main__' :
a = [ 1 , 0 ]
a = changeToZero(a);
print ( " arr[0] = " + str (a[ 0 ]))
print ( " arr[1] = " + str (a[ 1 ]))
|
C#
using System;
class GFG {
public static void changeToZero( int [] a)
{
a[a[1]] = a[1 - a[1]];
}
public static void Main()
{
int [] arr;
arr = new int [2];
arr[0] = 1;
arr[1] = 0;
changeToZero(arr);
Console.WriteLine( "arr[0]= " + arr[0]);
Console.WriteLine( "arr[1]= " + arr[1]);
}
}
|
Javascript
<script>
function changeToZero(a)
{
a[a[1]] = a[1 - a[1]];
}
let arr;
arr = [];
arr[0] = 1;
arr[1] = 0;
changeToZero(arr);
document.write( "arr[0] = " + arr[0] + "<br/>" );
document.write( "arr[1] = " + arr[1]);
</script>
|
Time Complexity: O(1)
Auxiliary Space: O(1)
Method 2
C++
void changeToZero( int a[2])
{
a[ !a[0] ] = a[ !a[1] ];
}
|
C
void changeToZero( int a[2])
{
a[ !a[0] ] = a[ !a[1] ]
}
|
Java
void changeToZero( int [ 2 ]a) {
a[!a[ 0 ]] = a[!a[ 1 ]];
}
|
Python3
def changeToZero(a):
a[ !a[ 0 ] ] = a[ !a[ 1 ] ]
|
C#
static void changeToZero( int [2]a) {
a[!a[0]] = a[!a[1]];
}
|
Javascript
<script>
function changeToZero(a)
{
a[ !a[0] ] = a[ !a[1] ];
}
</script>
|
Time Complexity: O(1)
Auxiliary Space: O(1)
Method 3
This method doesn’t even need complement.
C
void changeToZero( int a[2])
{
a[ a[1] ] = a[ a[0] ]
}
|
Java
static void changeToZero( int a[ 2 ])
{
a[ a[ 1 ] ] = a[ a[ 0 ] ]
}
|
Python3
def changeToZero(a) :
a[ a[ 1 ] ] = a[ a[ 0 ] ]
|
C#
static void changeToZero( int [] a)
{
a[ a[1] ] = a[ a[0] ];
}
|
Javascript
function changeToZero(a)
{
a[ a[1] ] = a[ a[0] ];
}
|
Time Complexity: O(1)
Auxiliary Space: O(1)
Method 4
Thanks to purvi for suggesting this method.
C
void changeToZero( int a[2])
{
a[0] = a[a[0]];
a[1] = a[0];
}
|
Java
static void changeToZero( int a[])
{
a[ 0 ] = a[a[ 0 ]];
a[ 1 ] = a[ 0 ];
}
|
C#
static void changeToZero( int [] a)
{
a[0] = a[a[0]];
a[1] = a[0];
}
|
Python3
def changeToZero(a) :
a[ 0 ] = a[a[ 0 ]]
a[ 1 ] = a[ 0 ]
|
Javascript
function changeToZero(a)
{
a[0] = a[a[0]];
a[1] = a[0];
}
|
Time Complexity: O(1)
Auxiliary Space: O(1)
There may be many more methods.
Please write comments if you find the above codes incorrect, or find other ways to solve the same problem.