Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

251
Vistas
Repetir un bucle varias veces

// ¿Cuál es el número mínimo de veces que tienes que lanzar una moneda antes de que puedas tener tres lanzamientos consecutivos que den el mismo resultado (los tres son cara o los tres son cruz)? ¿Cuál es el número máximo de vueltas que se pueden necesitar? ¿Cuántas volteretas se necesitan en promedio? En este ejercicio exploraremos estas preguntas creando un programa que simule varias series de lanzamientos de monedas.

// Cree un programa que use un generador de números aleatorios para simular lanzar una moneda varias veces. La moneda simulada debe ser justa, lo que significa que la probabilidad de cara es igual a la probabilidad de cruz. Su programa debe lanzar monedas simuladas hasta que ocurran 3 caras consecutivas o 3 cruces consecutivos. Muestre una H cada vez que el resultado sea cara y una T cada vez que el resultado sea cruz, con todos los resultados de una simulación en la misma línea. Luego muestra el número de lanzamientos que se necesitaron para alcanzar 3 ocurrencias consecutivas del mismo resultado. Cuando se ejecuta su programa, debe realizar la simulación 10 veces e informar el número promedio de vueltas necesarias. La salida de muestra se muestra a continuación:

 const headsOrTails = []; const flipcounts = []; let threeInARow = false; while (threeInARow == false) { const coinFlip = Math.floor(Math.random() * 10 + 1); if (coinFlip <= 5) { headsOrTails.push('H'); } else { headsOrTails.push('T'); } for (let index = 0; index < headsOrTails.length; index++) { const element = headsOrTails[index]; if (element == headsOrTails[index + 1]) { if (element == headsOrTails[index + 2]) { threeInARow = true; console.log('il numero di flip ottenuti è ' + headsOrTails.length); } } } }

¿Hay alguna forma de repetir el bucle while varias veces? por ejemplo 10 veces

about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

flips = []; for (let i = 0; i < 10; i++) { let threeInARow = false; let results = ""; while (threeInARow == false) { const coinFlip = Math.random(); results += coinFlip < 0.5 ? "H" : "T"; if (results.includes("HHH") || results.includes("TTT")) { threeInARow = true; console.log(results); flips.push(results.length); } } } console.log(flips); const average = arr => arr.reduce((a, b) => a + b, 0) / arr.length; console.log("Average:", average(flips))
about 4 years ago · Juan Pablo Isaza Denunciar

0

  1. Reemplace el while...loop con un for...loop
  2. Use break para salir del ciclo antes si su variable booleana está configurada como verdadera.

Vea abajo:

 const headsOrTails = []; const flipcounts = []; let threeInARow = false; for(let i=0; i<10; i++) { const coinFlip = Math.floor(Math.random() * 10 + 1); if (coinFlip <= 5) { headsOrTails.push('H'); } else { headsOrTails.push('T'); } for (let index = 0; index < headsOrTails.length; index++) { const element = headsOrTails[index]; if (element == headsOrTails[index + 1]) { if (element == headsOrTails[index + 2]) { console.log('the number of flips obtained is ' + headsOrTails.length); threeInARow = true; } } } if(threeInARow) break; } if(!threeInARow) { console.log("No matches were found"); }

about 4 years ago · Juan Pablo Isaza Denunciar

0

Puede realizar un seguimiento de cuántas caras o cruces consecutivas ha habido en los n anteriores utilizando un par de variables y una ventana deslizante:

 const flipCoin = () => Math.random() < 0.5 ? "H" : "T"; const flipCoinUntilNConsecutive = n => { const flips = [], slidingWindow = []; let windowHeadsCount = 0, windowTailsCount = 0; while (true) { const newestFlip = flipCoin(); flips.push(newestFlip); slidingWindow.push(newestFlip); newestFlip == "H" ? windowHeadsCount++ : windowTailsCount++; if (slidingWindow.length == n) { // array.length is O(1). if (windowHeadsCount == n || windowTailsCount == n) { console.log(...flips); return flips.length; } const oldestFlip = slidingWindow.shift(); oldestFlip == "H" ? windowHeadsCount-- : windowTailsCount--; } } }; const n = 3, repeats = 10; console.log(`${repeats} simulations of flipping a coin until ${n} consecutive:`); console.log(); let minFlipsRequired = Number.MAX_VALUE, maxFlipsRequired = 0, totalFlipsRequired = 0; for (let s = 1; s <= repeats; s++) { const flipsRequired = flipCoinUntilNConsecutive(n); console.log(`Simulation ${s}: ${flipsRequired}`); minFlipsRequired = Math.min(minFlipsRequired, flipsRequired); maxFlipsRequired = Math.max(maxFlipsRequired, flipsRequired); totalFlipsRequired += flipsRequired; } console.log(); console.log(`minFlipsRequired: ${minFlipsRequired}`); console.log(`maxFlipsRequired: ${maxFlipsRequired}`); console.log(`totalFlipsRequired: ${totalFlipsRequired}`); const averageFlipsRequired = totalFlipsRequired / repeats; console.log(`averageFlipsRequired: ${averageFlipsRequired}`);

Salida de ejemplo:

 10 simulations of flipping a coin until 3 consecutive: HTHTTT Simulation 1: 6 TTHHH Simulation 2: 5 HHH Simulation 3: 3 HHH Simulation 4: 3 HTHHH Simulation 5: 5 THHTTHHH Simulation 6: 8 HTHTHHH Simulation 7: 7 HTTT Simulation 8: 4 THTTT Simulation 9: 5 HHH Simulation 10: 3 minFlipsRequired: 3 maxFlipsRequired: 8 totalFlipsRequired: 49 averageFlipsRequired: 4.9
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda