Disponemos de una lista de estudiantes con su DNI y su nota, ordenada por nota de mayor a menor. La lista tiene al menos un estudiante aprobado (nota ) y uno suspendido (nota ). Queremos saber cuántos estudiantes han aprobado.
Disponemos de una tupla Estudiant con la
declaración:
#include <vector>
#include <string>
using namespace std;
struct Estudiant {
string dni;
double nota;
};
/**
* @brief Devuelve el número de estudiantes que han aprobado (nota >= 5.0).
*
* @pre El vector `E` está ordenado de mayor a menor nota.
* El vector tiene al menos un estudiante aprobado y uno suspendido.
*/
int quants_aprovats(const vector<Estudiant>& E);
Haz una función quants_aprovats con la declaración de
arriba.
Por ejemplo, si tenemos la lista de estudiantes:
12345678A 9.5
23456789B 7.2
34567890C 5.0
45678901D 4.9
56789012E 3.1
La función debería devolver 3, ya que hay 3 estudiantes con nota .
Este problema tiene como centro de interés la eficiencia. Usad el mejor algoritmo posible en la función y considerad que recibiréis un vector de grandes dimensiones.
IMPORTANTE: Al enviar este problema, hay que poner
en el fichero .cc solo: a) los includes,
b) la declaración de la tupla Estudiant y
c) la definición de la función quants_aprovats. Si
modificáis el main.cc para poder probar en vuestro
ordenador, podéis borrar (o comentar con /* y
*/) la función main y
llegir_estudiants.
La entrada son varios casos de listas de estudiantes. De la lectura ya se encarga el programa principal. Cada caso empieza con un entero () seguido de líneas con el DNI y la nota de cada estudiante. La lista está ordenada por nota de mayor a menor y tiene al menos un estudiante aprobado y uno suspendido.
La salida es el número de aprobados para cada lista. De la escritura también se encarga el programa principal.
Input
5 12345678A 9.5 23456789B 7.2 34567890C 5.0 45678901D 4.9 56789012E 3.1 4 11111111A 10.0 22222222B 8.5 33333333C 6.0 44444444D 4.5 3 55555555A 5.0 66666666B 3.2 77777777C 2.1 2 88888888A 9.0 99999999B 4.0
Output
3 3 1 1