Programming

T04-1D-A05. Haciendo agrupaciones de N elementos en un array

Enunciado

Haz un programa en Java que realice agrupaciones de los elementos de un array en grupos de N elementos contiguos. Los elementos del array serán cadenas de texto, representando nombres de alumnos.

Ejemplos:

  • Dado el array de cadenas {David, Maria, Sergio, Cristhian, Miguel, Alfonso}, hacer agrupaciones de 3 elementos contiguos, daría como resultado los siguientes grupos:
    • Grupo 1: David, Maria, Sergio
    • Grupo 2: Cristhian, Miguel, Alfonso
  • Dado el mismo array de cadenas anterior: {David, Maria, Sergio, Cristhian, Miguel, Alfonso}, hacer agrupaciones de 2 elementos contiguos, daría como resultado los siguientes grupos:
    • Grupo 1: David, Maria
    • Grupo 2: Sergio, Cristhian 
    • Grupo 3: Miguel, Alfonso
  • Dado el mismo array de cadenas anterior: {David, Maria, Sergio, Cristhian, Miguel, Alfonso}, hacer agrupaciones de 4 elementos contiguos, daría como resultado los siguientes grupos:
    • Grupo 1: David, Maria, Sergio, Cristhian
    • Grupo 2: Miguel, Alfonso, FALTA, FALTA

ENTRADA

La entrada comienza con un número indicando cuántos casos de prueba habrá que procesar.

Cada uno de los casos estará formado por:

  • Una primera línea con el número N de elementos que tiene que tener cada grupo que se haga, donde N > 0
  • Una segunda línea con el número L de elementos del array, donde L > 0
  • Una tercera con los L elementos de dicho array separados por un espacio. NOTA: No se podrán usar nombres compuestos, pues los tomaría como dos nombres si las partes del nombre compuesto están separados por un espacio.

SALIDA

Por cada caso de prueba, imprimirá las agrupaciones hechas, cada una en una línea, donde se rellenará con la palabra FALTA aquellos miembros que le falten al último grupo hecho, si es que le falta alguno.

Entre caso y caso, se imprimirán 10 guiones en una línea, para que se pueda diferenciar entre las salidas de los distintos casos de prueba.

RESTRICCIONES

Se resolverá el problema haciendo uso de la siguiente descomposición funcional:

  • Una función que reciba un array de cadenas y el número de miembros que tiene que tener cada grupo, y devuelva una array de cadenas, donde en cada cadena estén los nombres de los miembros de cada grupo, separados por espacio.

Es decir, que si la función recibe los siguientes argumentos:

  • alumnos = {David, Maria, Sergio, Cristhian, Miguel, Alfonso}
  • tamanyoGrupos = 4

devolvería el siguiente array de 2 elementos: { David Maria Sergio Cristhian, Miguel Alfonso FALTA FALTA}, donde

  • el primer elemento del array sería la cadena "David Maria Sergio, Cristhian" y
  • el segundo elemento sería la cadena "Miguel Alfonso FALTA FALTA"

El programa principal, para cada caso, generará el array de alumnos leyendo de teclado, llamará a la función e imprimirá el array resultado devuelto por la función con el formato que se espera para la salida del programa

Solución


											
import java.util.Scanner; public class AgruparN { public static void main(String[] args) { // TODO code application logic here Scanner sc = new Scanner(System.in); int numCasos = 0; int arraySize; int tamanyoGrupos = 0; String[] alumnos; String[] grupos; numCasos = sc.nextInt(); for (int i = 1; i <= numCasos; i++) { tamanyoGrupos = sc.nextInt(); arraySize = sc.nextInt(); alumnos = new String[arraySize]; for (int j = 0; j < alumnos.length; j++) { alumnos[j] = sc.next(); } grupos = agruparN(alumnos,tamanyoGrupos); for (int j = 0; j < grupos.length; j++) { System.out.println(grupos[j]); } System.out.println("----------"); } } public static String[] agruparN(String[] alumnos, int tamanyoGrupos){ int posicionArrayAlumnos; int contadorGrupo; int numGrupo; String grupoActual; String[] grupos; int numGrupos = alumnos.length / tamanyoGrupos; if (alumnos.length % tamanyoGrupos != 0){ numGrupos++; } grupos = new String[numGrupos]; posicionArrayAlumnos = 0; numGrupo = 0; while (posicionArrayAlumnos < alumnos.length) { contadorGrupo = 1; grupoActual = ""; while (contadorGrupo <= tamanyoGrupos && posicionArrayAlumnos < alumnos.length) { grupoActual = grupoActual + alumnos[posicionArrayAlumnos] + " "; contadorGrupo++; posicionArrayAlumnos++; } grupoActual = grupoActual.trim(); while (contadorGrupo <= tamanyoGrupos) { grupoActual = grupoActual + " FALTA"; contadorGrupo++; } grupos[numGrupo] = grupoActual; numGrupo++; } return grupos; } }

Input

12 3 6 David Maria Sergio Cristhian Miguel Alfonso 3 5 Teresa Carmen Sergio Mohammed David 3 4 Javier Marina Susana Gines 2 6 David Maria Sergio Cristhian Miguel Alfonso 2 5 Teresa Carmen Sergio Mohammed David 2 4 Javier Marina Susana Gines 4 10 David Maria Sergio Cristhian Miguel Alfonso Javier Marina Susana Gines 3 10 David Maria Sergio Cristhian Miguel Alfonso Javier Marina Susana Gines 2 10 David Maria Sergio Cristhian Miguel Alfonso Javier Marina Susana Gines 1 10 David Maria Sergio Cristhian Miguel Alfonso Javier Marina Susana Gines 10 10 David Maria Sergio Cristhian Miguel Alfonso Javier Marina Susana Gines 15 10 David Maria Sergio Cristhian Miguel Alfonso Javier Marina Susana Gines
12 3 6 David Maria Sergio Cristhian Miguel Alfonso 3 5 Teresa Carmen Sergio Mohammed David 3 4 Javier Marina Susana Gines 2 6 David Maria Sergio Cristhian Miguel Alfonso 2 5 Teresa Carmen Sergio Mohammed David 2 4 Javier Marina Susana Gines 4 10 David Maria Sergio Cristhian Miguel Alfonso Javier Marina Susana Gines 3 10 David Maria Sergio Cristhian Miguel Alfonso Javier Marina Susana Gines 2 10 David Maria Sergio Cristhian Miguel Alfonso Javier Marina Susana Gines 1 10 David Maria Sergio Cristhian Miguel Alfonso Javier Marina Susana Gines 10 10 David Maria Sergio Cristhian Miguel Alfonso Javier Marina Susana Gines 15 10 David Maria Sergio Cristhian Miguel Alfonso Javier Marina Susana Gines

Output

David Maria Sergio Cristhian Miguel Alfonso ---------- Teresa Carmen Sergio Mohammed David FALTA ---------- Javier Marina Susana Gines FALTA FALTA ---------- David Maria Sergio Cristhian Miguel Alfonso ---------- Teresa Carmen Sergio Mohammed David FALTA ---------- Javier Marina Susana Gines ---------- David Maria Sergio Cristhian Miguel Alfonso Javier Marina Susana Gines FALTA FALTA ---------- David Maria Sergio Cristhian Miguel Alfonso Javier Marina Susana Gines FALTA FALTA ---------- David Maria Sergio Cristhian Miguel Alfonso Javier Marina Susana Gines ---------- David Maria Sergio Cristhian Miguel Alfonso Javier Marina Susana Gines ---------- David Maria Sergio Cristhian Miguel Alfonso Javier Marina Susana Gines ---------- David Maria Sergio Cristhian Miguel Alfonso Javier Marina Susana Gines FALTA FALTA FALTA FALTA FALTA ----------
David Maria Sergio Cristhian Miguel Alfonso ---------- Teresa Carmen Sergio Mohammed David FALTA ---------- Javier Marina Susana Gines FALTA FALTA ---------- David Maria Sergio Cristhian Miguel Alfonso ---------- Teresa Carmen Sergio Mohammed David FALTA ---------- Javier Marina Susana Gines ---------- David Maria Sergio Cristhian Miguel Alfonso Javier Marina Susana Gines FALTA FALTA ---------- David Maria Sergio Cristhian Miguel Alfonso Javier Marina Susana Gines FALTA FALTA ---------- David Maria Sergio Cristhian Miguel Alfonso Javier Marina Susana Gines ---------- David Maria Sergio Cristhian Miguel Alfonso Javier Marina Susana Gines ---------- David Maria Sergio Cristhian Miguel Alfonso Javier Marina Susana Gines ---------- David Maria Sergio Cristhian Miguel Alfonso Javier Marina Susana Gines FALTA FALTA FALTA FALTA FALTA ----------