Skip to content
Related Articles

Related Articles

Improve Article
A Boolean Array Puzzle
  • Difficulty Level : Medium
  • Last Updated : 28 May, 2021

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] ];
}
 
// Driver code
int main()
{
    int a[] = {1, 0};
    changeToZero(a);
     
    cout<<"arr[0] = "<<a[0]<<endl;
    cout<<" arr[1] = "<<a[1];
    return 0;
}
 
// This code is contributed by rathbhupendra

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]];
}
 
// Driver code
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]);
}
}
 
// This code is contributed by rohitsingh07052

Python3




def changeToZero(a):
    a[ a[1] ] = a[ not a[1] ]
    return a
 
# Driver code
if __name__=='__main__':
    a = [1, 0]
    a = changeToZero(a);
     
    print(" arr[0] = " + str(a[0]))
    print(" arr[1] = " + str(a[1]))
 
# This code is contributed by Yash_R

Javascript




<script>
 
function changeToZero(a)
{
    a[a[1]] = a[1 - a[1]];
}
     
// Driver code
let arr;
arr = [];
arr[0] = 1;
arr[1] = 0;
changeToZero(arr);
 
document.write("arr[0] = " + arr[0] + "<br/>");
document.write("arr[1] = " + arr[1]);
 
// This code is contributed by avijitmondal1998
 
</script>

Method 2

C




void changeToZero(int a[2])
{
    a[ !a[0] ] = a[ !a[1] ]
}

 
Method 3
This method doesn’t even need complement. 

C




void changeToZero(int a[2])
{
    a[ a[1] ] = a[ a[0] ]
}

 
 

Method 4
Thanks to purvi for suggesting this method.

C




void changeToZero(int a[2])
{
  a[0] = a[a[0]];
  a[1] = a[0];
}

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.
 

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with industry experts, please refer Geeks Classes Live




My Personal Notes arrow_drop_up
Recommended Articles
Page :