es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Encontrar el número de ocurrencias de fracciones en Java

Estoy tratando de encontrar e imprimir el número de apariciones de fracciones de un archivo en mi programa. Las fracciones que se simplifican hasta el mismo número cuentan como una aparición, por lo que 12/6 cuenta como 6/3 también. Hasta ahora, he separado las fracciones en numerador y denominador en arrays separados. Las fracciones que tengo en el numerador y denominador provienen de un array separado que recibí de un archivo. Estoy teniendo problemas para tratar de encontrar cómo simplificar las fracciones y también encontrar la cantidad total de apariciones. Esto es lo que tengo hasta ahora:

String[] split = new String[2]; //String que contiene numerador y denominador
int[] numerator = new int[100];
int[] denominator = new int[100];

for(int i = 0; i < numOfFractions; ++i) { //Bucle a través del número de líneas
    split = fractions[i].split("/");  //Dividir las fracciones en /
    System.out.println("Prueba aquí " + fractions[i]);  //TODO --> prueba
    numerator[i] = Integer.parseInt(split[0]);  //Numerador
    System.out.println("Numerador = " + numerator[i]);  //TODO --> prueba
    denominator[i] = Integer.parseInt(split[1]);  //Denominador
    System.out.println("Denominador = " + denominator[i] + "\n");    //TODO --> prueba
}

}

Estas son las fracciones obtenidas de un archivo. Cada fracción está en su propia línea y puedo asumir que cada fracción tendrá el formato (A/B).

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para simplificar las fracciones y contar su frecuencia, puedes utilizar un HashMap. Aquí tienes un enfoque que puedes seguir:
    1. Itera a través de cada fracción en los arreglos numerador y denominador.
    2. Encuentra el máximo común divisor (MCD) del numerador y denominador utilizando el algoritmo de Euclides. Puedes escribir un método separado para esto.
    3. Divide tanto el numerador como el denominador por el MCD para simplificar la fracción.
    4. Almacena la fracción simplificada como una cadena en un HashMap, con su frecuencia como valor. Si la fracción ya existe en el HashMap, incrementa su frecuencia.
    5. Imprime las fracciones y sus frecuencias en el HashMap.

    Aquí tienes un código que implementa el enfoque anterior:

    import java.util.HashMap;
    
    public class FractionCounter {
        public static void main(String[] args) {
            String[] fractions = {
                "6/3",
                "4/2",
                "5/9",
                "80/90",
                "800/900",
                "5/5",
                "1/2",
                "1/3",
                "1/1",
                "1/4",
                "2/7",
                "2/8",
                "2/9"
            };
    
            HashMap<string, integer=""> counts = new HashMap<>();
    
            for (int i = 0; i < fractions.length; i++) {
                String[] split = fractions[i].split("/");
                int numerador = Integer.parseInt(split[0]);
                int denominador = Integer.parseInt(split[1]);
    
                int mcd = mcd(numerador, denominador);
                numerador /= mcd;
                denominador /= mcd;
    
                String fraccion = numerador + "/" + denominador;
                counts.put(fraccion, counts.getOrDefault(fraccion, 0) + 1);
            }
    
            for (String fraccion : counts.keySet()) {
                int frecuencia = counts.get(fraccion);
                System.out.println(fraccion + ": " + frecuencia);
            }
        }
    
        private static int mcd(int a, int b) {
            if (b == 0) {
                return a;
            }
            return mcd(b, a % b);
        }
    }
    

    Esto debería imprimir:

    2/3: 3
    4/2: 1
    5/9: 1
    8/9: 1
    5/5: 1
    1/2: 1
    1/3: 1
    1/1: 1
    1/4: 1
    2/7: 1
    1/4: 1
    2/9: 1
    

    Ten en cuenta que la fracción “1/4” aparece dos veces, pero técnicamente no es la misma fracción ya que están en líneas separadas en el archivo. Si deseas contarlas como la misma fracción, deberás modificar el código en consecuencia.</string,>

Comments are closed.