# PBinfo #858 – Expresie6 – Rezolvare C++

Sursa: Codul lui Andrei
Limbaj: C++
Autor rezolvare: Darius

## Enunț

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;

## Cod sursă C++

```cpp
#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;
}
```

## Resurse

- [Pagina originală](https://codulluiandrei.ro/rezolvari/pbinfo/858)
- [Sursa C++](https://codulluiandrei.ro/rezolvari/pbinfo/858/cod.cpp)
- [Sursa pe GitHub](https://raw.githubusercontent.com/codulluiandrei/pbinfo/main/pbinfo-858/main.cpp)
- [Cursuri de informatică pentru BAC](https://codulluiandrei.ro/academia/info-curs/pachet-cpp/)
