Foro de elhacker.net

Programación => Java => Mensaje iniciado por: sergio88 en 22 Septiembre 2019, 03:33 am



Título: Recorrer array
Publicado por: sergio88 en 22 Septiembre 2019, 03:33 am
Buenas noches, alguien me podría dar una mano con este ejercicio ?

Dado un array de enteros, hacer una función que indique que rangos de números consecutivos dan
como resultado la cantidad que se le pasa como parámetro:
Ej: array=(6,7,5,4,3,1,2,3,5,6,7,9,0,0,1,2,4,1,2,3,5,1,2)
 sumar(13)
Los elementos entre (0,1) suman 13
Los elementos entre (2,5) suman 13
Los elementos entre (3,7) suman 13
Los elementos entre (9,10) suman 13
Los elementos entre (12,19) suman 13
Los elementos entre (13,19) suman 13
Los elementos entre (14,19) suman 13
Los elementos entre (18,22) suman 13


Título: Re: Recorrer array
Publicado por: EdePC en 22 Septiembre 2019, 05:30 am
Saludos,

- La idea es guardar un índice inicial (idxIni) e ir sumando los demás valores hasta igualar la cantidad dada, si es igual: se imprime, se resetea la suma y se continúa con el siguiente índice, si se pasa: se hace lo mismo pero sin imprimir.

- A mí me está funcionando lo siguiente, ya te toca entenderlo e implementarlo dentro de una función:

Código
  1. class Recorre {
  2.  public static void main(String[] args) {
  3.    Scanner leer = new Scanner(System.in);
  4.    int[] array = { 6, 7, 5, 4, 3, 1, 2, 3, 5, 6, 7, 9, 0, 0, 1, 2, 4, 1, 2, 3, 5, 1, 2 };
  5.    int suma = 0;
  6.    int idxIni = 0;
  7.    System.out.print("Ingrese la cantidad: ");
  8.    int cantidad = leer.nextInt();
  9.  
  10.    for ( int i = 0; i < array.length; i++ ) {
  11.      suma += array[i];
  12.      if ( suma == cantidad ) {
  13.        System.out.println( "Los elementos entre (" + idxIni + "," + i + ") suman " + cantidad );
  14.      }
  15.      if ( suma == cantidad || suma > cantidad ) {
  16.        i = idxIni;
  17.        idxIni++;
  18.        suma = 0;
  19.      }
  20.    }
  21.  
  22.    leer.close();
  23.  }
  24. }

Código:
C:\Users\EdSon\Desktop>java Recorre.java
Ingrese la cantidad: 5
Los elementos entre (2,2) suman 5
Los elementos entre (6,7) suman 5
Los elementos entre (8,8) suman 5
Los elementos entre (16,17) suman 5
Los elementos entre (18,19) suman 5
Los elementos entre (20,20) suman 5

C:\Users\EdSon\Desktop>java Recorre.java
Ingrese la cantidad: 13
Los elementos entre (0,1) suman 13
Los elementos entre (2,5) suman 13
Los elementos entre (3,7) suman 13
Los elementos entre (9,10) suman 13
Los elementos entre (12,19) suman 13
Los elementos entre (13,19) suman 13
Los elementos entre (14,19) suman 13
Los elementos entre (18,22) suman 13

C:\Users\EdSon\Desktop>java Recorre.java
Ingrese la cantidad: 22
Los elementos entre (0,3) suman 22
Los elementos entre (1,6) suman 22
Los elementos entre (9,11) suman 22
Los elementos entre (11,19) suman 22

C:\Users\EdSon\Desktop>


Título: Re: Recorrer array
Publicado por: Serapis en 23 Septiembre 2019, 00:50 am
Te pongo una sencilla solucion en pseudocodigo, a ti te toca pasarlo luego al lenguaje de tu interés, lo que solo te será posible si alcanzas a entenderlo correctamente (espero que si). con culaquier duda, pregunta...
Código:
entero = funcion X(array entero Valores, entero Valor)
    entero indice, suma, resultados

    indice =0
    suma = 0
    bucle para k desde 0 hasta valores.fin
        suma += valores(k)

        Hacer mientras (suma > valor)
            suma -= valores(indice)  // retira el valor sumado por el indice inicial
            indice +=1  
        Repetir

        Hacer mientras (suma = valor)  // ok, imprimir indices
            imprimir indice y k
            suma -= valores(indice)  // retira el valor sumado por el indice inicial
            indice +=1                    // indice 'consumido', se pasa al siguiente.
            resultados +=1
        repetir
    siguiente

    devolver resultados
fin funcion

Ejemplo para el array: (5, 5, 2, 3, 7, 0, 7, 8, 7, 0, 4, 8, 7, 3, 9, 8, 0, 9, 3, 5, 7, 3, 5, 4, 2)
con valor: 27
Resultados: 7
02-07 ::::  2 + 3 + 7 + 0 + 7 + 8  = 27
07-11 ::::  8 + 7 + 0 + 4 + 8  = 27
11-14 ::::  8 + 7 + 3 + 9  = 27
12-15 ::::  7 + 3 + 9 + 8  = 27
16-21 ::::  0 + 9 + 3 + 5 + 7 + 3  = 27
17-21 ::::  9 + 3 + 5 + 7 + 3  = 27
18-23 ::::  3 + 5 + 7 + 3 + 5 + 4  = 27


Con tu array: (6, 7, 5, 4, 3, 1, 2, 3, 5, 6, 7, 9, 0, 0, 1, 2, 4, 1, 2, 3, 5, 1, 2)
y el valor que diste: 13
Resultados: 8
00-01 ::::  6 + 7  = 13
02-05 ::::  5 + 4 + 3 + 1  = 13
03-07 ::::  4 + 3 + 1 + 2 + 3  = 13
09-10 ::::  6 + 7  = 13
12-19 ::::  0 + 0 + 1 + 2 + 4 + 1 + 2 + 3  = 13
13-19 ::::  0 + 1 + 2 + 4 + 1 + 2 + 3  = 13
14-19 ::::  1 + 2 + 4 + 1 + 2 + 3  = 13
18-22 ::::  2 + 3 + 5 + 1 + 2  = 13


Este algoritmo a diferencia del que ofrece EdePC, no precisa volver a sumar todo cada vez... es lineal, solo suma vada indice del array una vez, por tanto es más óptimo en cuanto a rendimiento.

p.d.: Me acabo de acordar que hace 2-4 días, dijsktra publicó en el foro de C, un problema muy similar, solo que aquél versaba de la diferencia entre pares de valores en un array (ordenado)... a dicha solución puede llegarse modificando el presente algoritmo... aunque es lo suficientemente distinto, como para empezar desde cero.


Título: Re: Recorrer array
Publicado por: sergio88 en 23 Septiembre 2019, 05:27 am
Gracias por la mano muchachoss, ahi estoy tratando de escribir una funcion propia. Saludosss