A Boolean Array Puzzle
Last Updated :
11 Nov, 2023
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++
#include <iostream>
using namespace std;
void changeToZero( int a[2])
{
a[ a[1] ] = a[ a[0] ]
}
int main() {
cout << "GFG!" ;
return 0;
}
|
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++
#include <iostream>
using namespace std;
void changeToZero( int a[2])
{
a[0] = a[a[0]];
a[1] = a[0];
}
int main() {
cout << "GFG!" ;
return 0;
}
|
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 ];
}
|
Python3
def changeToZero(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];
}
|
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.
Like Article
Suggest improvement
Share your thoughts in the comments
Please Login to comment...