problema de Josefo | (Solución iterativa)

Hay N Los niños están sentados en N sillas dispuestas alrededor de un círculo. Las sillas están numeradas del 1 al N. El juego comienza yendo en círculos contando los niños a partir de la primera silla. Una vez que la cuenta llega a K, ese niño abandona el juego, retirando su silla. El juego comienza de nuevo, comenzando con la siguiente silla en el círculo. El último niño que queda en el círculo es el ganador. Encuentra al niño que gana el juego. Ejemplos:

Input : N = 5, K = 2
Output : 3
Firstly, the child at position 2 is out, 
then position 4 goes out, then position 1
Finally, the child at position 5 is out. 
So the position 3 survives.

Input : 7 4
Output : 2

Hemos discutido una solución recursiva para el Problema de Josefo . La solución dada es mejor que la solución recursiva de Josephus Solution, que no es adecuada para grandes entradas, ya que genera un desbordamiento de pila. La complejidad del tiempo es O(N). Enfoque : en el algoritmo, usamos la variable de suma para averiguar la silla que se eliminará. La posición actual de la silla se calcula sumando el número de sillas K a la posición anterior, es decir, la suma y el módulo de la suma. Finalmente devolvemos sum+1 ya que la numeración comienza de 1 a N. 

C++

// Iterative solution for Josephus Problem
#include <bits/stdc++.h>
using namespace std;
 
// Function for finding the winning child.
long long int find(long long int n, long long int k)
{
    long long int sum = 0, i;
 
    // For finding out the removed
    // chairs in each iteration
    for (i = 2; i <= n; i++)
        sum = (sum + k) % i;
 
    return sum + 1;
}
 
// Driver function to find the winning child
int main()
{
    int n = 14, k = 2;
    cout << find(n, k);
    return 0;
}

Java

// Iterative solution for Josephus Problem
class Test
{
 
    // Method for finding the winning child.
    private int josephus(int n, int k)
    {
        int sum = 0;
 
        // For finding out the removed
        // chairs in each iteration
        for(int i = 2; i <= n; i++)
        {
            sum = (sum + k) % i;
        }
 
        return sum+1;
    }
 
    // Driver Program to test above method
    public static void main(String[] args)
    {
        int n = 14;
        int k = 2;
        Test obj = new Test();
        System.out.println(obj.josephus(n, k));
    }
}
 
// This code is contributed by Kumar Saras

Python3

# Iterative solution for Josephus Problem
 
# Function for finding the winning child.
def find(n, k):
 
    sum = 0
 
    # For finding out the removed
    # chairs in each iteration
    for i in range(2,n+1):
        sum = (sum + k) % i
 
    return sum + 1
 
# Driver function to find the winning child
n,k = 14,2
print(find(n, k))
 
# This code is contributed by shinjanpatra

Javascript

<script>
 
// Iterative solution for Josephus Problem
 
// Function for finding the winning child.
function find(n, k)
{
    let sum = 0, i;
 
    // For finding out the removed
    // chairs in each iteration
    for (i = 2; i <= n; i++)
        sum = (sum + k) % i;
 
    return sum + 1;
}
 
// Driver function to find the winning child
let n = 14, k = 2;
document.write(find(n, k),"</br>");
 
// This code is contributed by shinjanpatra
 
</script>
Producción:

13

Publicación traducida automáticamente

Artículo escrito por atulim 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 *