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
= 2
0
+ 2
2
+ 2
3
+ 2
6
.
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, 2
16
]
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
2
16
.
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 .
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!