Foro de elhacker.net

Programación => Ejercicios => Mensaje iniciado por: shishioku en 8 Julio 2019, 20:25 pm



Título: igualar todos los numeros dentro del array - Ejercicio Java
Publicado por: shishioku en 8 Julio 2019, 20:25 pm
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.


Título: Re: igualar todos los numeros dentro del array - Ejercicio Java
Publicado por: @XSStringManolo en 8 Julio 2019, 20:56 pm
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.


Título: Re: igualar todos los numeros dentro del array - Ejercicio Java
Publicado por: Serapis en 9 Julio 2019, 17:48 pm
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:
Código:
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:
Código:
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...


Título: Re: igualar todos los numeros dentro del array - Ejercicio Java
Publicado por: @XSStringManolo en 10 Julio 2019, 08:06 am
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


Título: Re: igualar todos los numeros dentro del array - Ejercicio Java
Publicado por: Serapis en 10 Julio 2019, 15:32 pm
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.


Título: Re: igualar todos los numeros dentro del array - Ejercicio Java
Publicado por: shishioku en 11 Julio 2019, 02:50 am

"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.





Título: Re: igualar todos los numeros dentro del array - Ejercicio Java
Publicado por: @XSStringManolo en 11 Julio 2019, 03:34 am
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.


Título: Re: igualar todos los numeros dentro del array - Ejercicio Java
Publicado por: shishioku en 11 Julio 2019, 03:54 am
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;
           
   
   }


Título: Re: igualar todos los numeros dentro del array - Ejercicio Java
Publicado por: 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.


Título: Re: igualar todos los numeros dentro del array - Ejercicio Java
Publicado por: shishioku en 11 Julio 2019, 21:55 pm
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


Título: Re: igualar todos los numeros dentro del array - Ejercicio Java
Publicado por: MinusFour en 12 Julio 2019, 04:11 am

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

Pues entonces no entendí muy bien tu problema. Como yo tengo entendido, solo uno de los números en el arreglo no se le suma 1, todos los demás se le suma 1.

Código:
(19) 15  12  11  9
(19) 16  13  12  10
(19) 17  14  13  11
(19) 18  15  14  12
(19) 19  16  15  13
 19 (20) 17  16  14
(20) 20  18  17  15
 20 (21) 19  18  16
(21) 21  20  19  17
 21 (22) 21  20  18
(22) 22  22  21  19
 22 (23) 23  22  20
 23  23 (24) 23  21
(24) 24  24  24  22
 24 (25) 25  25  23
 25  25 (26) 26  24
 26  26  26 (27) 25
(27) 27  27  27  26
 27 (28) 28  28  27
 28  28 (29) 29  28
 29  29  29 (30) 29
 30  30  30  30  30

El número entre parentesís es el más alto.

Tu haces:

22 22 22 21 19

Y después:

23 22 22 22 20

Pero si te entendí correctamente solo 1 número es considerado el más alto y todos los demás terminan aumentandose en 1.

Entonces:

22 22 22 21 19

Debería terminar en:

22 23 23 22 20


Título: Re: igualar todos los numeros dentro del array - Ejercicio Java
Publicado por: WHK en 12 Julio 2019, 04:25 am
En Java no necesitas iteraciones para hacer eso, puedes utilizar lambda.