Aprender-C

← Todos los talleres

Las dos cuadrillas del túnel

Dos cuadrillas de topografía miden las cotas de un túnel, una desde cada boca, y se cruzan a mitad de camino. Cada una entrega su libreta con las cotas ya ordenadas de menor a mayor, en metros respecto al nivel del mar, así que dentro del cerro las hay negativas. El jefe de obra necesita una sola libreta, y volver a ordenarlo todo desde cero sería tirar a la basura el trabajo que las cuadrillas ya hicieron.

Qué hay que hacer

Lee las dos listas, que vienen ya ordenadas de menor a mayor, y escribe una sola lista con todas las cotas, también de menor a mayor. No se elimina nada: si las dos cuadrillas midieron la misma cota, esa cota aparece dos veces. Aprovecha que las dos entran ordenadas.

El archivo que te dan

La primera línea trae dos números separados por un espacio: n y m, cuántas cotas trae cada libreta, con 0 <= n, 0 <= m y 1 <= n + m <= 5000. Después vienen las n cotas de la primera libreta y luego las m de la segunda, cada grupo ya ordenado de menor a mayor, con valores entre -1000 y 1000. Una libreta puede venir vacía, y entonces no trae ningún número.

El que tienes que escribir

Las n + m cotas ordenadas de menor a mayor, una por línea, con las repeticiones incluidas.

Los casos que puedes ver

Hay 6 en total. Los demás se descubren fallando, como en el ramo.

el ejemplo del enunciado, con una cota bajo el nivel del mar

entrada

3 4
-12 0 35
-40 -12 8 60

salida

-40
-12
-12
0
8
35
60

las dos cuadrillas midieron lo mismo: nada se descarta

entrada

2 2
5 9
5 9

salida

5
5
9
9

Tu programa

Recibe las dos rutas por argv, igual que en el ramo. Lo que escribas con fprintf es lo que se compara.

#include <stdio.h>
#include <stdlib.h>
int main(int argc, char **argv) {
if (argc < 3) {
fprintf(stderr, "uso: %s entrada salida\n", argv[0]);
return 1;
}
/* Falta: abrir argv[1] con "r" y argv[2] con "w". */
/* Falta: leer los dos tamaños y después cada libreta en su propio arreglo. */
/* Falta: recorrer las dos a la vez, escribiendo siempre la menor de las dos que miras. */
/* Falta: vaciar lo que sobre de la libreta que no se acabó. */
/* Falta: cerrar los dos archivos antes de terminar. */
return 0;
}