Open In App

A Boolean Array Puzzle

Last Updated : 11 Nov, 2023
Suggest changes
Share
Like Article
Like
Report

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  
C#
using System; class GFG {  public static void changeToZero(int[] a)  {  a[a[1]] = a[1 - a[1]];  }  // Driver code  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]);  } } // This code is contributed by souravmahato348. 
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> 

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]]; } // This code is contributed by souravmahato348. 
Python3
def changeToZero(a): a[ !a[0] ] = a[ !a[1] ] # This code is contributed by sanjoy_62. 
C#
static void changeToZero(int [2]a) {   a[!a[0]] = a[!a[1]]; } // This code is contributed by souravmahato348. 
JavaScript
<script> function changeToZero(a)  {   a[ !a[0] ] = a[ !a[1] ]; }  // This code is contributed by souravmahato348. </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] ]  }  // this code is contributed by shivanisinghss2110 
Python3
def changeToZero(a) : a[ a[1] ] = a[ a[0] ] 
C#
static void changeToZero(int[] a)  {   a[ a[1] ] = a[ a[0] ]; } //this code is contributed by phasing17 
JavaScript
function changeToZero(a)  {   a[ a[1] ] = a[ a[0] ]; }  //this code is contributed by phasing17 

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]; } //This code is contributed by shruti456rawal 
Python3
# Python code for the above approach def changeToZero(a) : a[0] = a[a[0]] a[1] = a[0] # This code is contributed by splevel62. 
C#
static void changeToZero(int[] a) {  a[0] = a[a[0]];  a[1] = a[0]; } //This code is contributed by shruti456rawal 
JavaScript
// JavaScript function to implement // the approach function changeToZero(a) {  a[0] = a[a[0]];  a[1] = a[0]; } // This code is contributed by phasing17 

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.
 


Similar Reads

Article Tags :
Practice Tags :