Cerința
Într-o galaxie îndepărtată există doar două elemente chimice. Cercetătorii le-au numit A
şi B
şi toate substanțele sunt alcătuite din aceste elemente. Mai precis, o substanță este un șir definit astfel:
A
șiB
sunt substanțe, formate din câte un atom;Ax
șiBy
sunt substanțe,x
șiy
find numere naturale.Ax
este formată dinx
atomi de tipA
, iarBy
este formată diny
atomi de tipB
;- dacă
S
este substanță atunci(S)x
este substanță,x
fiind un număr natural. Dacă înS
suntp
atomi, în(S)x
vor fip*x
atomi; - dacă
S
şiT
sunt substanțe atunciST
este substanță. Dacă înS
suntx
atomi, iar înT
sunty
atomi, înST
vor fix+y
atomi.
Pentru o substanță dată să se determine numărul atomilor de tip A
şi numărul atomilor de tip B
care o compun.
Date de intrare
Programul citește de la tastatură numărul un şir de caractere reprezentând substanța dată.
Date de ieșire
Programul va afișa pe ecran două numere nA nB
, separate printr-un spațiu, reprezentând numărul atomilor de tip A
, respectiv numărul atomilor de tip B
din substanța dată.
Restricții și precizări
- șirul dat are cel mult
255
de caractere
Exemplu
Intrare
(A3B2)2A3(B2)2
Ieșire
9 8
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 Atomi:
#include <iostream>
#include <cstring>
using namespace std;
char s[256];
int A[1000] , B[1000] , n , *v;
int main()
{
cin >> s;
n = 1;
for(unsigned int i = 0 ; i < strlen(s) ; i ++)
if(s[i] == '(')
n++,A[n] = B[n] = 0;
else
if(s[i] == ')')
{
int x = 0;
if(s[i+1]>='0' && s[i+1] <='9')
{
while(s[i+1]>='0' && s[i+1] <='9')
x = 10 * x + s[i+1] - '0', i ++;
}
else
x = 1;
A[n-1] += A[n] * x, B[n-1] += B[n] * x , n --;
}
else
{
//este A sau B
if(s[i] == 'A')
v = A;
else
v = B;
int x = 0;
if(s[i+1]>='0' && s[i+1] <='9')
{
while(s[i+1]>='0' && s[i+1] <='9')
x = 10 * x + s[i+1] - '0', i ++;
}
else
x = 1;
v[n] += x;
}
cout << A[1] << " " << B[1];
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 #874 Atomi
Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #874 Atomi 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!