Comprobar si la puerta está abierta o cerrada

Dado n puertas y n personas. Las puertas están numeradas del 1 al n y las personas reciben identificaciones numeradas del 1 al n. Cada puerta puede tener solo 2 estados abierta y cerrada. Inicialmente todas las puertas tienen estado cerrado. Encuentra el estado final de todas las puertas si una persona cambia el estado actual de todas las puertas, es decir si de estado abierto cambia a estado cerrado y viceversa, para lo cual está autorizado. Una persona con id ‘i’ está autorizada a cambiar el estado de la puerta numerada ‘j’ si ‘j’ es un múltiplo de ‘i’. 
Nota: 
– Una persona tiene que cambiar el estado actual de todas las puertas para las que está autorizado exactamente una vez. 
– Puede darse la situación de que antes de que una persona cambie el estado de la puerta, otra persona que también esté autorizada para la misma puerta cambie el estado de la puerta. 
Ejemplo : 
 

Input : 3
Output : open closed closed

Explicación: como n = 3, por lo tanto, hay 
3 puertas {1, 2, 3} y 
3 personas con id {1, 2, 3}
persona con id = 1 puede cambiar el estado de la puerta 1, 2, 3 
persona con id = 2 puede cambiar el estado de la puerta 2 
persona con id = 3 puede cambiar el estado de la puerta 3
Estado actual de todas las puertas: cerrado cerrado cerrado 
Considere una secuencia de eventos, 
 

  1. Persona con id = 1 cambia el estado de la puerta 2 
    Estado actual de todas las puertas: cerrado abierto cerrado
  2. Persona con id = 3 cambia el estado de la puerta 3 
    Estado actual de todas las puertas: cerrado abierto abierto
  3. Persona con id = 1 cambia el estado de la puerta 1, 3 
    Estado actual de todas las puertas: abierto abierto cerrado
  4. Persona con id = 2 cambia el estado de la puerta 2 
    Estado actual de todas las puertas: abierto cerrado cerrado

Otro ejemplo :

Input : 5
Output : open closed closed open closed

Note: Sequence of open/closed is displayed in
increasing door number 

Enfoque: Es un enfoque matemático y lógico. Si lo observamos correctamente, encontramos que el estado final de una puerta numerada i está abierta si ‘i’ tiene un número impar de factores y el estado está cerrado si ‘i’ tiene un número par de factores. No depende en qué secuencia se cambia el estado de las puertas. Para averiguar si el recuento de divisores de un número es par o impar, podemos ver Comprobar si el recuento de divisores es par o impar
 

C++

// C++ implementation of
// doors open or closed
#include <bits/stdc++.h>
using namespace std;
 
// Function to check whether 'n'
// has even number of factors or not
bool hasEvenNumberOfFactors(int n)
{
    int root_n = sqrt(n);
 
    // if 'n' is a perfect square
    // it has odd number of factors
    if ((root_n*root_n) == n)
        return false;
 
    // else 'n' has even
    // number of factors
    return true;
}
 
// Function to find and print
// status of each door
void printStatusOfDoors(int n)
{
    for (int i=1; i<=n; i++)
    {
        // If even number of factors
        // final status is closed
        if (hasEvenNumberOfFactors(i))
            cout << "closed" << " ";
 
        // else odd number of factors
        // final status is open
        else
            cout << "open" << " ";
    }
}
 
// Driver program
int main()
{
    int n = 5;
    printStatusOfDoors(n);
    return 0;
}

Java

// java implementation of
// doors open or closed
import java.io.*;
 
class GFG {
     
    // Function to check whether 'n'
    // has even number of factors or not
    static boolean hasEvenNumberOfFactors(int n)
    {
        double root_n = Math.sqrt(n);
     
        // if 'n' is a perfect square
        // it has odd number of factors
        if ((root_n*root_n) == n)
            return false;
     
        // else 'n' has even
        // number of factors
        return true;
    }
     
    // Function to find and print
    // status of each door
    static void printStatusOfDoors(int n)
    {
        for (int i = 1 ; i <= n; i++)
        {
            // If even number of factors
            // final status is closed
            if (hasEvenNumberOfFactors(i))
                System .out.print( "closed" + " ");
     
            // else odd number of factors
            // final status is open
            else
                System.out.print( "open" + " ");
        }
    }
     
    // Driver program
    public static void main (String[] args) {
        int n = 5;
        printStatusOfDoors(n);
         
    }
}
 
// This article is contributed by vt_m

Python3

# Python 3 implementation of
# doors open or closed
import math
 
# Function to check whether
# 'n' has even number of
# factors or not
def hasEvenNumberOfFactors(n):
 
    root_n = math.sqrt(n)
 
    # if 'n' is a perfect square
    # it has odd number of factors
    if ((root_n * root_n) == n):
        return False
 
    # else 'n' has even
    # number of factors
    return True
 
# Function to find and print
# status of each door
def printStatusOfDoors(n):
 
    for i in range(1, n + 1):
     
        # If even number of factors
        # final status is closed
        if (hasEvenNumberOfFactors(i) == True):
            print("closed", end =" ")
 
        # else odd number of factors
        # final status is open
        else:
            print("open", end =" ")
     
# Driver program
n = 5
 
printStatusOfDoors(n)
 
# This code is contributed by Smitha Dinesh Semwal

C#

// C# implementation of
// doors open or closed
using System;
 
class GFG
{
 
// Function to check whether
// 'n' has even number of
// factors or not
static bool hasEvenNumberOfFactors(int n)
{
    double root_n = Math.Sqrt(n);
 
    // if 'n' is a perfect square
    // it has odd number of factors
    if ((root_n * root_n) == n)
        return false;
 
    // else 'n' has even
    // number of factors
    return true;
}
 
// Function to find and print
// status of each door
static void printStatusOfDoors(int n)
{
    for (int i = 1 ; i <= n; i++)
    {
        // If even number of factors
        // final status is closed
        if (hasEvenNumberOfFactors(i))
            Console.Write("closed" + " ");
 
        // else odd number of factors
        // final status is open
        else
            Console.Write("open" + " ");
    }
}
 
// Driver Code
static public void Main ()
{
    int n = 5;
    printStatusOfDoors(n);
}
}
 
// This Code is contributed by ajit

PHP

<?php
// PHP implementation of
// doors open or closed
 
// Function to check whether
// 'n' has even number of
// factors or not
 
function hasEvenNumberOfFactors($n)
{
    $root_n = sqrt($n);
 
    // if 'n' is a perfect square
    // it has odd number of factors
    if (($root_n * $root_n) == $n)
        return false;
 
    // else 'n' has even
    // number of factors
    return true;
}
 
// Function to find and print
// status of each door
function printStatusOfDoors($n)
{
    for ($i = 1; $i <= $n; $i++)
    {
        // If even number of factors
        // final status is closed
        if (hasEvenNumberOfFactors($i))
            echo "closed" ," ";
 
        // else odd number of factors
        // final status is open
        else
            echo "open" ," ";
    }
}
 
// Driver Code
$n = 5;
printStatusOfDoors($n);
 
// This code is contributed by ajit@
?>

Javascript

<script>
 
// JavaScript program for the above approach
 
    // Function to check whether 'n'
    // has even number of factors or not
    function hasEvenNumberOfFactors(n)
    {
        let root_n = Math.sqrt(n);
     
        // if 'n' is a perfect square
        // it has odd number of factors
        if ((root_n*root_n) == n)
            return false;
     
        // else 'n' has even
        // number of factors
        return true;
    }
     
    // Function to find and print
    // status of each door
    function printStatusOfDoors(n)
    {
        for (let i = 1 ; i <= n; i++)
        {
            // If even number of factors
            // final status is closed
            if (hasEvenNumberOfFactors(i))
                document.write( "closed" + " ");
     
            // else odd number of factors
            // final status is open
            else
                document.write( "open" + " ");
        }
    }
     
// Driver Code
     
    let n = 5;
    printStatusOfDoors(n);
 
// This code is contributed by susmitakundugoaldanga.
</script>

Producción : 
 

open closed closed open closed

Complejidad temporal: O(nlogn)
Espacio auxiliar: O(1)

Referencias: Preguntado en una entrevista de TCS 
Este artículo es una contribución de Aarti_Rathi y Ayush Jauhari . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
 

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 *