A Boolean Array Puzzle

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++



filter_none

edit
close

play_arrow

link
brightness_4
code

#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

chevron_right


C

filter_none

edit
close

play_arrow

link
brightness_4
code

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;
}

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python3 program for a 
# boolean array puzzle
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

chevron_right


Method 2

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right


Method 3
This method doesn’t even need complement.

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right


Method 4
Thanks to purvi for suggesting this method.

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right


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.




My Personal Notes arrow_drop_up

Improved By : rathbhupendra, Yash_R

Article Tags :
Practice Tags :


4


Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.