Cerința
Gigel se joacă cu cuvinte (scrise cu litere din alfabetul englez, mari sau mici). El a asociat fiecărei litere din alfabet o valoare număr natural, pe care a numit-o valoarea literei. Apoi a definit valoarea unui cuvânt astfel: se calculează suma S1
a valorilor literelor mici din cuvânt şi suma S2
a valorilor literelor mari din cuvânt. Valoarea cuvântului va fi S1 - S2
.
Cunoscându-se valoarea fiecărei litere din alfabet şi o listă de cuvinte, să se determine cuvântul cu valoarea maximă. Dacă există mai multe cuvinte de valoare maximă, se vor determina toate, în ordinea din lista dată.
Date de intrare
Fișierul de intrare valori.in
conține pe prima linie numărul 26
de numere, reprezentând, în ordine, valorile literelor din alfabet, pe a doua linie numărul de cuvinte n
iar pe următoarele n
linii câte un cuvânt format din litere mari şi mici ale alfabetului englez.
Date de ieșire
Fișierul de ieșire valori.out
va conține cuvintele de valoare maximă din lista dată, în ordinea din listă, fiecare cuvânt pe câte o linie.
Restricții și precizări
- valorile literelor sunt numere naturale mai mici decât
1000
1 ≤ n ≤ 1000
- fiecare dintre cuvintele date conţine cel mult
255
caractere
Exemplu
valori.in
2 7 7 3 9 8 9 6 3 9 6 6 6 5 5 8 2 6 6 1 5 6 9 4 7 3 4 BaciL AbAc Aba AbEcEdAr
valori.out
AbAc
Observaţie
Valoarea unui cuvânt poate fi negativă. De exemplu, valoarea cuvântului BaciL
este (2+7+3)-(7+6)=-1
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 Valori:
#include <fstream>
#include <iostream>
#include <cstring>
using namespace std;
ifstream fin("valori.in");
ofstream fout("valori.out");
int valori[26];
int valoare_litera(char X)
{
if(X>='a' && X <= 'z')
return valori[X-'a'];
if(X>='A' && X <= 'Z')
return -valori[X-'A'];
return 0;
}
int valoare_cuvant(char * X)
{
int S = 0;
for(int i = 0 ; X[i] ; i ++)
S += valoare_litera(X[i]);
return S;
}
int main()
{
for(int i = 0 ; i < 26 ; i ++)
fin >> valori[i];
int n , nrt , vmax = -2000000000; ;
char s[256] , t[1000][256];
fin >> n;
for(int i = 1 ; i <= n ; i ++)
{
fin >> s;
int val_curenta = valoare_cuvant(s);
cout << s << " " << val_curenta << endl;
if(val_curenta > vmax)
{
vmax = val_curenta;
nrt = 1;
strcpy(t[0] , s);
}
else
if(val_curenta == vmax)
{
strcpy(t[nrt] , s);
nrt ++;
}
}
for(int i = 0 ; i < nrt ; i ++)
fout << t[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 #856 Valori
Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #856 Valori 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!