Cerința
Elevii clasei a X-a s-au implicat în strângerea de cadouri pentru Crăciun. Fiecare elev a adus mai multe cadouri, și a trimis prin email șefului clasei o urare, însoțită de lista cadourilor. Fiecare email are forma:
urare lista_cadouri
urare
este un text care nu conţine cifre. Lista cadourilor constă într-o enumerare a cadourilor:
numar_cadouri denumire_cadou
(numar_cadouri
este un număr natural, iar denumire_cadou
este un cuvânt scris cu litere mici ale alfabetului englez; numar_cadouri
şi denumire_cadou
sunt separate prin cel puţin un spaţiu), cadourile din listă fiind separate prin spaţii şi/sau diverse semne de punctuaţie
Şeful clasei trebuie să centralizeze listele primite. Ajutaţi-l să construiască o listă a care să conţină denumirea fiecărui cadou şi numărul total de cadouri de acel tip (cantitatea). Lista va fi ordonată descrescător după cantitate.
Date de intrare
Fișierul de intrare cadouri.in
conține pe prima linie numărul n
de elevi din clasa a X-a; fiecare dintre următoarele n
linii, conţine câte un email.
Date de ieșire
Fișierul de ieșire cadouri.out
va conține pe prima linie numărul de cadouri diferite C
; următoarele C
linii vor conţine câte un cadou şi cantitatea totală, separate prin exact un spaţiu. Lista cadouri va fi ordonată descrescător după cantitate. Dacă există mai multe cadouri cu aceeaşi cantitate, se va afişa mai întâi cadoul cu denumirea mai mică din punct de vedere lexicografic.
Restricții și precizări
1 ≤ n ≤ 100
- fiecare linie a fişierului de intrare conţine cel mult
255
caractere - sunt cel mult
500
de cadouri diferite cu denumirea de cel mult20
de litere ale afabetului englez - cantitatea din fiecare cadou este cel mult
100.000
Exemplu
cadouri.in
3 La multi ani! 4 papusi, 15 ciocolate , 20 sosete. Sarbatori fericite :) ! 3 ciocolate , 10 biscuiti, 5 papusi Salut. 2 ciocolate , 1 papusi. 1 ciocolate!
cadouri.out
4 ciocolate 21 sosete 20 biscuiti 10 papusi 10
Cum e corect?
cout < "As la info";
cout << "As la info";
cout >> "As la info";
Felicitări! Poți mai mult?
Avem sute de probleme pentru tine, fiecare cu explicații ușor de înțeles.
Greșit, dar nu-i bai!
Antrenează-te cu sutele de probleme pe care ți le-am pregătit. Îți explicăm fiecare problemă în parte.
Rezolvare
Iată rezolvarea de 100 de puncte pentru problema Cadouri:
#include <fstream>
#include <iostream>
#include <cstring>
using namespace std;
ifstream fin("cadouri.in");
ofstream fout("cadouri.out");
int n, cantitate[505];
char denumire[505][21];
bool cifra(char X)
{
return X >= '0' && X <= '9';
}
bool litera_mica(char X)
{
return X >= 'a' && X <= 'z';
}
int main()
{
int m;
char email[256];
char p[21];
fin >> m;
fin.getline(email , 256);
for( ; m ; m --)
{
fin.getline(email , 256);
int lg = strlen(email); //vom distruge sirul
for(int i = 0 ; i < lg ; i ++)
if( cifra( email[i]) )
{
int cnt = 0;
while(cifra(email[i]))
{
cnt = 10 * cnt + email[i] - '0';
i ++;
}
while(email[i] == ' ')
i ++;
int j = i;
while(litera_mica(email[i]))
i ++;
email[i] = 0;
strcpy(p , email + j);
int poz = -1;
for(int i = 0 ; i < n && poz == -1 ; i ++)
if(strcmp(denumire[i] , p) == 0)
poz = i;
if(poz != -1)
cantitate[poz] += cnt;
else
{
strcpy(denumire[n] , p);
cantitate[n] = cnt;
n ++;
}
}
}
for (int i = 0 ; i < n - 1 ; i ++)
for(int j = i + 1 ; j < n ; j ++)
if(cantitate[i] < cantitate[j])
{
int aux = cantitate[i]; cantitate[i] = cantitate[j] ; cantitate[j] = aux;
strcpy(p , denumire[i]); strcpy(denumire[i], denumire[j]); strcpy(denumire[j] , p);
}
else
if(cantitate[i] == cantitate[j])
if(strcmp(denumire[i] , denumire[j]) > 0)
{
strcpy(p , denumire[i]); strcpy(denumire[i], denumire[j]); strcpy(denumire[j] , p);
}
fout << n << "\n";
for(int i = 0 ; i < n ; i ++)
fout << denumire[i] << " " << cantitate[i] << "\n";
return 0;
}
Atenție
Enunțurile afișate pe această pagină aparțin exclusiv site-ului PbInfo. Astfel, pentru ștergerea conținutului, puteți să ne contactați la adresa .
Rezolvarea problemei #853 Cadouri
Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #853 Cadouri de pe PbInfo.ro. Atenție: nu încurajăm copiatul codului! Totuși, credem cu tărie că analizarea unei soluții corecte este o metodă foarte ușoară de a învăța informatică, astfel că oferim sursele pentru peste 1500 de probleme de pe platforma PbInfo.ro.
Pentru rezolvări PbInfo de la peste 1500 de probleme, vă invităm să intrați pe site-ul nostru!