Un rompecabezas de array booleana

Entrada: una array arr[] de dos elementos con valor 0 y 1
Salida: convierte ambos elementos en 0. 

Especificaciones: Las siguientes son las especificaciones a seguir.

1) Se garantiza que un elemento es 0 pero no sabemos su posición.
2) No podemos decir sobre otro elemento que puede ser 0 o 1.
3) Solo podemos complementar elementos de array, ninguna otra operación como and, or, multi, division, …. etc.
4) No podemos usar construcciones if, else y loop.
5) Obviamente, no podemos asignar 0 directamente a los elementos de la array.

Hay varias formas de hacerlo, ya que estamos seguros de que siempre hay un cero. Gracias a devendraiiit por sugerir los siguientes 3 métodos.

Método 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>

Complejidad de tiempo: O(1)

Espacio Auxiliar: O(1)

Método 2

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>

Complejidad de tiempo: O(1)

Espacio Auxiliar: O(1)

Método 3
Este método ni siquiera necesita complemento. 

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

Complejidad de tiempo: O(1)

Espacio Auxiliar: O(1) 

Método 4
Gracias a purvi por sugerir este método.

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

C#

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.

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

Complejidad de tiempo: O(1)

Espacio Auxiliar: O(1)

Puede haber muchos más métodos.
Escriba comentarios si encuentra que los códigos anteriores son incorrectos o encuentre otras formas de resolver el mismo problema.
 

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *