Aprender-C

← Todos los talleres

Los premios de la feria

La asociación de una feria libre reparte al cierre unos cuantos premios entre los puestos a los que mejor les fue. Cada puesto declara su saldo del día en miles de pesos, y algunos declaran pérdida: llovió, o se les echó a perder la mercadería. La tesorera no quiere la tabla entera, quiere los mejores y nada más.

Qué hay que hacer

Lee los saldos de todos los puestos y escribe los k mayores, del mayor al menor. Si varios puestos declararon el mismo saldo y todos entran en el corte, ese saldo se escribe tantas veces como puestos lo declararon, porque cada premio es de un puesto distinto.

El archivo que te dan

La primera línea trae dos números separados por un espacio: n, cuántos puestos hay, y k, cuántos premios se reparten, con 1 <= k <= n <= 5000. Después vienen los n saldos, enteros entre -1000 y 100000.

El que tienes que escribir

k líneas, una por premio, con el saldo premiado y del mayor al menor. Solo el número: ni el lugar, ni de qué puesto era, ni signos de moneda.

Los casos que puedes ver

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

el ejemplo del enunciado: los tres mejores

entrada

6 3
40 -15 220 7 220 95

salida

220
220
95

k igual a n: sale la lista entera de mayor a menor

entrada

5 5
-3 -50 12 0 -3

salida

12
0
-3
-3
-50

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 cuántos puestos hay y cuántos premios se reparten. */
/* Falta: leer los saldos de los puestos. */
/* Falta: conseguir que los k mayores queden localizados y en orden. */
/* Falta: escribir esos k saldos, del mayor al menor. */
/* Falta: cerrar los dos archivos antes de terminar. */
return 0;
}