Per resoldre aquest problema heu de completar el codi que trobareu al final de l’enunciat. Hi heu de reemplaçar cada ??? per una o més línies de codi. No canvieu res més. Descarregueu-vos de la web del problema el fitxer code.cc amb el codi a completar (cliqueu el botó “.CPP” corresponent), editeu-lo i envieu-lo al jutge.
Volem mantenir informació bàsica de les donacions monetàries a un hospital. En particular, volem guardar quants diners en total ha donat cada persona, identificada de forma única amb el seu nif (8 dígits seguits de la lletra majúscula de control).
El programa permet fer cinc operacions diferents:
N: Escriu el nombre de donants precedit de
“number:”. Fixeu-vos que hi pot haver menys donants que
donacions, si hi ha donants repetits.
D
:
S’apunta que la persona amb nif
ha donat
diners. Si la persona ja havia fet alguna donació, n’acumula els
imports.
Q
:
Consulta quants diners ha donat de moment la persona amb nif
.
Cal escriure -1 si encara no ha fet cap donació.
P: Escriu una línia amb tots els nifs que acaben amb
un dígit parell (ignorant el caràcter de control), amb els nifs ordenats
alfabèticament. Cal separar els nifs amb espais.
L: Escriu la informació del donant amb el nif més
gran alfabèticament. Si no n’hi ha cap, escriu
“NO LAST NIF”.
L’entrada consisteix en diverses operacions segons s’ha indicat anteriorment. Els nifs són correctes, i les donacions són enters estrictament positius.
Per a cada operació (excepte les donacions), escriviu la informació demanada. Es garanteix que la màxima donació acumulada no serà més gran que .
#include <iostream>
#include <map>
using namespace std;
int main() {
map<string, int> M;
char c;
while (cin >> c) {
if (c == 'N') {
???
}
else if (c == 'D') {
string nif;
int money;
cin >> nif >> money;
???
}
else if (c == 'Q') {
string nif;
cin >> nif;
???
}
else if (c == 'P') {
???
}
else { // c == 'L'
???
}
}
}
Input
N L P D 02345678T 1000 D 98765433Y 500 Q 02345678T Q 12345679S P L D 98765432M 500 D 98765433Y 2000 N P L D 99999999R 700 L
Output
number: 0 NO LAST NIF 1000 -1 02345678T 98765433Y 500 number: 3 02345678T 98765432M 98765433Y 2500 99999999R 700