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
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;
}
#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
Matematică,
8 ani în urmă
Religie,
8 ani în urmă
Limba română,
8 ani în urmă
Matematică,
9 ani în urmă
Matematică,
9 ani în urmă
Matematică,
9 ani în urmă
Limba română,
9 ani în urmă