Rezolvare completă PbInfo #2195 sumpow2

Orice număr natural nenul se poate scrie în mod unic ca o sumă de puterile ale lui 2 care nu se repetă. Exemplu: 77 = 20 + 22 + 23 + 26.
Primele 16 puteri ale lui 2 se reprezintă prin litere ale alfabetului englez, după cum urmează: a = 1, b = 2, c = 4, d = 8, e = 16, f = 32, g = 64, h = 128, i = 256, j = 512, k = 1024, l = 2048, m = 4096, n = 8192, o = 16384, p = 32768.
Astfel, orice număr din intervalul [1, 216] poate fi codificat ca o combinație unică a acestor litere, aranjate în ordine alfabetică, în care orice literă apare cel mult o singură dată, astfel încât suma valorilor acestor litere să fie egală cu valoarea numărului (77 = acdg).

Cerința

Să se scrie un program C/C++ care citește două șiruri de caractere ce reprezintă două numere naturale codificate după regula de mai sus, program care afișează un șir de caractere ce reprezintă suma celor două numere.

Date de intrare

Fișierul de intrare sumpow2.in conține pe prima linie două șiruri de caractere despărțite printr-un singur spațiu, șiruri de caractere ce reprezintă codificarea celor două numere.

Date de ieșire

Fișierul de ieșire sumpow2.out va conține pe prima linie un șir de caractere ce reprezintă codificarea numărului calculat ca fiind suma celor două numere.

Restricții și precizări

  • cele două numerele date precum și suma lor nu va depăși valoarea 216.

Exemplu

sumpow2.in

acdg ac

sumpow2.out

beg

Important!

Programul scris trebuie să calculeze șirul de ieșire fără a transforma șirurile inițiale în numere!

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 sumpow2:

# include <bits/stdc++.h>
using namespace std;

ifstream f("sumpow2.in");
ofstream g("sumpow2.out");

char a[20], b[20];
int A[20], B[20];

int main()
{
    f >> a >> b;

    int la = strlen(a), lb = strlen(b);

    for(int i=0; i<la; ++i)
        A[ a[i] - 'a' ] = 1;

    for(int i=0; i<lb; ++i)
        B[ b[i] - 'a' ] = 1;

    int t = 0;
    for(int i=0; i < 17; ++i){
        int x = A[i] + B[i] + t;
        if (x % 2 ) g << (char) ('a' + i);
        t = x / 2;
    }

    g << '\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 #2195 sumpow2

Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #2195 sumpow2 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!