Rezolvare completă PbInfo #856 Valori

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 Adresa de email.

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!