Informatică, întrebare adresată de Ouroboros, 9 ani în urmă

100p !!!        

#858. C++. Dau coroana pentru explicatii.

Apropo... orice rezolvare corecta este buna, insa prefer rezolvarile care nu implica  utilizarea altor librarii. Cat mai simplu

Cerința
Se dă o expresie cu necunoscutele x y z și coeficienți întregi. Să se reducă termenii asemenea și să se determine termenul din expresia rezultat cu coeficientul maxim.

Date de intrare
Programul citește de la tastatură un șir de caractere reprezentând expresia.

Date de ieșire
Programul va afișa pe ecran un șir de caractere cu următorul conținut: coeficient necunoscută, fără spații între ele.

Restricții și precizări
șirul citit va avea cel mult 255 caractere și poate conține litere x y z, cifre, semnele + - și spații.
coeficienții din expresie vor fi numere întregi. Se garantează că pe parcursul reducerii termenilor asemenea valoarea absolută a rezultatelor nu depășește 2.000.000.000
se garantează că expresia dată este matematic corectă



Exemplu
Intrare

2x+3y+x-15y-6x
Ieșire

-3x
Explicație
După reducerea termenilor asemenea expresia devine -3x-12y coeficientul maxim este -3, pentru necunoscuta x;

Răspunsuri la întrebare

Răspuns de express
3
Iti trimit solutia oficiala. Succes!
#include <iostream>
#include <cstring>
using namespace std;

bool Cifra(char X)
{
return X >='0' && X<='9';
}

int main()
{
char s[256];
cin.getline(s , 256);
int coefX = 0 , coefY = 0, coefZ = 0;
bool apareX = false, apareY = false , apareZ = false;
int semn = 1 , coef = 0;
bool amCoef = false;
int n = strlen(s);
for(int i = 0 ; i < n ; i ++)
{
if(s[i] == '+')
semn = 1;
if(s[i] == '-')
semn = -1;
if(Cifra(s[i]))
{
coef = 0, amCoef = true;
while(Cifra(s[i]))
coef = 10 * coef + s[i] - '0' , i ++;
}
if(s[i] == 'x' || s[i] == 'y' || s[i] == 'z')
{
if(!amCoef)
coef = 1;
if(s[i] == 'x')
apareX = true, coefX += semn * coef;
if(s[i] == 'y')
apareY = true, coefY += semn * coef;
if(s[i] == 'z')
apareZ = true, coefZ += semn * coef;
semn = 1, coef = 0, amCoef = false;
}
}
int cf[4]={-2000000001 , coefX, coefY, coefZ}, apare[4]={0 , apareX,apareY,apareZ};
int pozMax = 0;
for(int i = 1; i <= 3 ; i ++)
if(apare[i])
if(cf[i] > cf[pozMax])
pozMax = i;
if(pozMax == 1)
cout << cf[pozMax] << "x";
if(pozMax == 2)
cout << cf[pozMax] << "y";
if(pozMax == 3)
cout << cf[pozMax] << "z";
return 0;
}

Alte întrebări interesante