igualar todos los numeros dentro del array - Ejercicio Java

Iniciado por shishioku, 8 Julio 2019, 20:25 PM

0 Miembros y 1 Visitante están viendo este tema.

shishioku

Hola tengo este ejercicio que me cuesta resolver, si alguien puede lograrlo, me gustaría saber como lo resolvió.


hay que codear la función " iterationsToEquality(array of integer) el cual retornara un int que sera la cantidad mínima de iteraciones para lograr igualar el valor de todos los números del array.
para lograrlo tenes que suman 1 a cada elemento del array, excepto al de mas valor, esto por cada iteracion , si hay 2 elementos con el mismo valor (los 2 mas altos) considerar solo 1 como tal .
array {1.3.3}

deberían quedar todos en 5,5,5.

@XSStringManolo

Sumale 1 a todos los elementos del array menos al mayor.
Solo tienes que comprobar el mayor numero y sumarle 1 a todos los elementos que no valgan lo mismo. Despues compruebas el menor al final de cada iteración. Si todos valen lo mismo sales del bucle.
Pon una variable a 0 y la usas de contador sumandole +1 en el bucle. Asi por cada iteracion se le suma uno.

Al salir del bucle retornas la variable.

Serapis

#2
El ejecrcicio, parece más bien diseñado para demostrar si una persona piensa por sí misma o simplemente se pone con la fuerza bruta a resolver el problema sin pararse a pensar un poco.


Veamos sea un array de 5 valores, y estos en concreto: 9, 15, 11, 19, 12
Claramente se vé que para que todos alcancan el valor 19, que es el más alto, bastarán 19-9 = 10 iteraciones, pués es la diferencia entre el menor y el mayor en el array.
9--> 10, 11,12,13,14,15,16,17,18-->19

...por tanto el problema se limita a recorrer en 2 bucles para llegar a la solución:
--- 1ª vez, para encontrar el mayor y menor elementos en el array

--- después se realiza la resta:

maxIteraciones = ValorMaximo - ValorMinimo

Maxiteraciones es el valor a devolver...

--- 2ª vez, por su parte un segundo recorrido en el array (si se reclama), pone todo el array con el valor máximo:

Para k desde 0 hasta array.length -1
    array(k) = valormaximo
siguiente

Este bucle por tanto optimiza la pérdida de eficiencia de sumar 1 a cada ítem en el array, excepto al mayor encontrado... pués hacerlo de forma ineficiente exigiría 2 bucles anidados...



Me edito antes de enviar... al releer, veo que si el array de entrada contiene 1,3,3 y la salida 5,5,5 es claro que incluso al valor mayor se le suma la diferencia (aunque esto contadice lo que la prosa describe)... Como hay cierta ambigüedad entre lo que se dice en prosa y lo que s emuestra de ejemplo, no cambio nada previo, si señalo que resuleto el caso que sea, si procede... luego pensando solo un poco más puedes modificar lo antedicho para lograr tu objetivo...

@XSStringManolo

NEBIRE el problema indica los pasos a seguir, no que lo resuelvas de una forma más eficiente. Dice explicitamente sumar +1 por cada iteración.
A mi el ejercicio me parece diseňado para practicar el manejo de bucles, funciones, arrays, contadores y condicionales. T

Serapis

Lo que se pide, no tiene porqué hacerse como se dice.

Este es precisamente un caso, donde se presta con suma facilidad a que el alumno demuestre entender y poner en práctica sus conocimientos.

Para hacer las cosas maquinalmente se construyeron las máquinas, las personas tienen (y deben usar) la capacidad de improvisar si supone mejoras (y sigue cumpliendo el objetivo final).

En fin, la diferencia entre el alumno que memoriza y el que aplica el conocimiento adquirido tiene aquí su ejemplo. El alumno que se conforme con 'repetir' como un loro lo que le han dicho, será el profesioal desechable en su puesto de trabajo en el futuro... Esta profesión (en toda su amplitud) requiere la capacidad de improvisar, de mejorar constantemente, no de conformarse y un profesor tiene la obligación de alentar esa cualidad.

...los bucles, arrays, funciones... no por ello dejan de ser ejercitados, se requieren igualmente.

shishioku


"Veamos sea un array de 5 valores, y estos en concreto: 9, 15, 11, 19, 12
Claramente se vé que para que todos alcancan el valor 19, que es el más alto, bastarán 19-9 = 10 iteraciones,"
Son 16 iteraciones , por que cuando lleguen 2 valores a 19, tiene que tomar 1 para subirlo, por lo cual subirán todos e incluso un 19, ese 19 quedara en 20 y así sucesivamente hasta que queden todos en 25.




@XSStringManolo

#6
Tienes razón. El planteamiento es el mismo que plantee cambiando los números e valgan lo mismo por unicamente tomar el mayor como dices.

No me fijé en el ejemplobque pusiste al final del programa disculpa.

shishioku

Ya lo puse resolver Gente! gracias igual.
Me enrosco mucho en cosas super dificiles y resulto ser una boludez.

    public static int iterationToEquiality(int[] array){
       
        int variable=0;
        int countA = 0;
       
        ArrayList<Integer> lista = new ArrayList<>();   
       
       
        for (int i = 0; i < array.length-1; i++) {
            variable = array;
            for (int j = 0; j < array.length-1; j++) {
               
                if (variable == array[j]) {
                    lista.add(j);
                    countA++;
                }
                if (variable != array[j]) {
                    lista.add(j);
                    countA++;
                }
               
                lista.get(j).equals(j);
            }
           
        }
       
      return countA;
           
   
   }

MinusFour

Si te entendi correctamente, si tuvieras tres numeros:

1, 1, 0

Entonces haría:

1, 2, 1
2, 2, 2

Y Si tuvieras:

1, 1, 1, 0

Entonces haría:

1, 2, 2, 1
2, 2, 3, 2
3, 3, 3, 3

Si es así, el número mas alto que estás buscando de 19, 15, 12, 11, 9 no es 25 sino 30. Y te tomaría 21 iteraciones.

shishioku

Cita de: MinusFour en 11 Julio 2019, 04:29 AM
Si te entendi correctamente, si tuvieras tres numeros:

1, 1, 0

Entonces haría:

1, 2, 1
2, 2, 2

Y Si tuvieras:

1, 1, 1, 0

Entonces haría:

1, 2, 2, 1
2, 2, 3, 2
3, 3, 3, 3

Si es así, el número mas alto que estás buscando de 19, 15, 12, 11, 9 no es 25 sino 30. Y te tomaría 21 iteraciones.


19 16 13 12 10
19 17 14 13 11
19 18 15 14 12
19 19 16 15 13
20 19 17 16 14
20 20 18 17 15
21 20 19 18 16
21 21 20 19 17
22 21 21 20 18
22 22 22 21 19
23 22 22 22 20
23 23 23 23 21
24 23 23 23 22
24 24 24 24 23
25 24 24 24 24
25 25 25 25 25