5-valores duplicados en un arreglo-Versión PSeInt

 

Versión PSeInt - Encontrar Duplicados Exactos

pseudocode
Algoritmo EncontrarDuplicadosExactos
    // Este algoritmo encuentra números que aparecen exactamente 2 veces en un arreglo
    
    Definir arreglo, frecuencia Como Entero[]
    Definir i, numero, resultado Como Entero[]
    Definir tamaño, indiceResultado Como Entero
    
    // Ejemplo de arreglo de entrada
    tamaño = 5
    Dimension arreglo[tamaño]
    arreglo[1] = 1
    arreglo[2] = 2
    arreglo[3] = 2
    arreglo[4] = 3
    arreglo[5] = 3
    
    // PASO 1: Encontrar el número máximo para dimensionar el arreglo de frecuencia
    Definir maximo Como Entero
    maximo = 0
    Para i = 1 Hasta tamaño Hacer
        Si arreglo[i] > maximo Entonces
            maximo = arreglo[i]
        FinSi
    FinPara
    
    // Crear arreglo de frecuencia (índices representan los números)
    Dimension frecuencia[maximo + 1]
    
    // PASO 2: Contar frecuencia de cada número
    Para i = 1 Hasta tamaño Hacer
        numero = arreglo[i]
        frecuencia[numero] = frecuencia[numero] + 1
    FinPara
    
    // PASO 3: Contar cuántos números aparecen exactamente 2 veces
    Definir contadorResultados Como Entero
    contadorResultados = 0
    
    Para i = 1 Hasta maximo Hacer
        Si frecuencia[i] = 2 Entonces
            contadorResultados = contadorResultados + 1
        FinSi
    FinPara
    
    // PASO 4: Crear arreglo de resultados
    Dimension resultado[contadorResultados]
    indiceResultado = 1
    
    Para i = 1 Hasta maximo Hacer
        Si frecuencia[i] = 2 Entonces
            resultado[indiceResultado] = i
            indiceResultado = indiceResultado + 1
        FinSi
    FinPara
    
    // PASO 5: Mostrar resultados
    Escribir "Números que aparecen exactamente 2 veces:"
    Si contadorResultados = 0 Entonces
        Escribir "No hay números duplicados exactos"
    Sino
        Para i = 1 Hasta contadorResultados Hacer
            Escribir resultado[i]
        FinPara
    FinSi
    
FinAlgoritmo

Versión más simple (sin arreglo de frecuencia):

pseudocode
Algoritmo EncontrarDuplicadosSimple
    Definir arreglo Como Entero[]
    Definir i, j, contador, tamaño Como Entero
    Definir encontrado Como Logico
    
    // Arreglo de ejemplo
    tamaño = 6
    Dimension arreglo[tamaño]
    arreglo[1] = 1
    arreglo[2] = 2
    arreglo[3] = 2
    arreglo[4] = 3
    arreglo[5] = 3
    arreglo[6] = 3
    
    Escribir "Números que aparecen exactamente 2 veces:"
    
    Para i = 1 Hasta tamaño Hacer
        // Verificar si ya procesamos este número
        encontrado = Falso
        Para j = 1 Hasta i-1 Hacer
            Si arreglo[j] = arreglo[i] Entonces
                encontrado = Verdadero
            FinSi
        FinPara
        
        Si NO encontrado Entonces
            // Contar cuántas veces aparece el número
            contador = 0
            Para j = 1 Hasta tamaño Hacer
                Si arreglo[j] = arreglo[i] Entonces
                    contador = contador + 1
                FinSi
            FinPara
            
            // Si aparece exactamente 2 veces, mostrarlo
            Si contador = 2 Entonces
                Escribir arreglo[i]
            FinSi
        FinSi
    FinPara
    
FinAlgoritmo

¿Cómo funciona la lógica en PSeInt?

  1. Preparación: Creamos un arreglo de frecuencia donde cada posición representa un número

  2. Conteo: Recorremos el arreglo original y aumentamos el contador para cada número

  3. Filtrado: Buscamos qué números tienen valor exactamente 2 en el arreglo de frecuencia

  4. Resultado: Mostramos los números que cumplen la condición

Salida esperada para [1, 2, 2, 3, 3, 3]:

text
Números que aparecen exactamente 2 veces:
2
 

Análisis del problema: Encontrar duplicados

¡Me alegra que te guste el seudocódigo! Vamos con este nuevo ejercicio.

1. Lógica en dos pasos

Paso 1: Contar cuántas veces aparece cada número

  • Recorrer todo el arreglo

  • Llevar un registro de cuántas veces hemos visto cada número

Paso 2: Filtrar los que aparecen exactamente 2 veces

  • Revisar nuestro registro de conteos

  • Seleccionar solo los números que tengan exactamente 2 apariciones

2. Seudocódigo detallado

text
INICIO
    LEER arreglo_numeros
    
    // Paso 1: Contar apariciones de cada número
    contador = {}  // Diccionario vacío para guardar conteos
    
    PARA CADA numero EN arreglo_numeros HACER
        SI numero YA EXISTE EN contador ENTONCES
            contador[numero] = contador[numero] + 1
        SINO
            contador[numero] = 1
        FIN SI
    FIN PARA
    
    // Paso 2: Encontrar números que se repiten exactamente 2 veces
    duplicados = []  // Arreglo vacío para resultados
    
    PARA CADA numero EN contador HACER
        SI contador[numero] ES IGUAL A 2 ENTONCES
            AGREGAR numero A duplicados
        FIN SI
    FIN PARA
    
    IMPRIMIR duplicados
FIN

3. Analogía

Imagina que eres maestro y tienes una lista de estudiantes:

  • Lista de estudiantes: Ana, Luis, María, Luis, Pedro, Ana, Luis

  • Contar apariciones:

    • Ana: 2 veces ✓ (exactamente 2)

    • Luis: 3 veces ✗ (más de 2)

    • María: 1 vez ✗ (menos de 2)

    • Pedro: 1 vez ✗ (menos de 2)

  • Resultado: Solo Ana aparece exactamente 2 veces

4. Código JavaScript para principiantes

javascript
// Función para encontrar duplicados que aparecen exactamente 2 veces
function encontrarDuplicados(arreglo) {
    // Paso 1: Contar cuántas veces aparece cada número
    let contador = {};
    
    for (let i = 0; i < arreglo.length; i++) {
        let numero = arreglo[i];
        
        // Si el número ya está en el contador, sumar 1
        // Si no está, inicializarlo en 1
        if (contador[numero]) {
            contador[numero] += 1;
        } else {
            contador[numero] = 1;
        }
    }
    
    // Paso 2: Encontrar números que aparecen exactamente 2 veces
    let duplicados = [];
    
    // Recorrer todas las claves (números) del contador
    for (let numero in contador) {
        if (contador[numero] === 2) {
            duplicados.push(Number(numero)); // Convertir de texto a número
        }
    }
    
    return duplicados;
}

// Pruebas con los ejemplos dados
console.log("Prueba 1: [4,3,2,7,8,3,1] =", encontrarDuplicados([4,3,2,7,8,3,1]));
console.log("Prueba 2: [1,1,2] =", encontrarDuplicados([1,1,2]));
console.log("Prueba 3: [1] =", encontrarDuplicados([1]));

5. Versión más simple (sin funciones)

javascript
// Arreglo de prueba
let numeros = [4, 3, 2, 7, 8, 3, 1];

// Objeto para contar (como un diccionario)
let contador = {};

// Contar cada número
for (let i = 0; i < numeros.length; i++) {
    let num = numeros[i];
    
    if (contador[num] === undefined) {
        // Primera vez que vemos este número
        contador[num] = 1;
    } else {
        // Ya habíamos visto este número antes
        contador[num] += 1;
    }
}

// Buscar los que aparecen exactamente 2 veces
let resultado = [];

for (let numero in contador) {
    if (contador[numero] === 2) {
        resultado.push(Number(numero));
    }
}

console.log("Números que aparecen exactamente 2 veces:", resultado);

6. Explicación del objeto contador

El contador es un objeto que funciona como un diccionario:

  • Claves: los números que encontramos

  • Valores: cuántas veces aparece cada número

Ejemplo con [4,3,2,7,8,3,1]:

text
contador = {
    "1": 1,
    "2": 1, 
    "3": 2,  ← Este aparece 2 veces ✓
    "4": 1,
    "7": 1,
    "8": 1
}

Resultado: [3] (solo el 3 aparece exactamente 2 veces)

¡Este enfoque es muy eficiente y fácil de entender para principiantes!

 

Comentarios

Entradas más populares de este blog

1-valores duplicados en un arreglo

n-funcion - el botón-n

Objetos básicos en JavaScript