Open In App

A Boolean Array Puzzle

Last Updated : 11 Nov, 2023
Comments
Improve
Suggest changes
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.