Recorrer array

Iniciado por sergio88, 22 Septiembre 2019, 03:33 AM

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

sergio88

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

EdePC

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 (java) [Seleccionar]
class Recorre {
  public static void main(String[] args) {
    Scanner leer = new Scanner(System.in);
    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 };
    int suma = 0;
    int idxIni = 0;
    System.out.print("Ingrese la cantidad: ");
    int cantidad = leer.nextInt();

    for ( int i = 0; i < array.length; i++ ) {
      suma += array[i];
      if ( suma == cantidad ) {
        System.out.println( "Los elementos entre (" + idxIni + "," + i + ") suman " + cantidad );
      }
      if ( suma == cantidad || suma > cantidad ) {
        i = idxIni;
        idxIni++;
        suma = 0;
      }
    }

    leer.close();
  }
}


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>

Serapis

#2
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...

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.

sergio88

Gracias por la mano muchachoss, ahi estoy tratando de escribir una funcion propia. Saludosss