fbpx

Problema #858 – Expresie6 – Rezolvari PBInfo

de Mihai-Alexandru

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;

#include <bits/stdc++.h>

using namespace std;

char s[256];
int f[300];

int numar(char ch)
{
    return ch >= '0' && ch <= '9';
}

int main()
{
    cin.getline(s , 256);
    int i = 0;
    bool sgn = 1;
    int nr = 0;
    while(s[i]!='\0')
    {
        while(numar(s[i]))
        {
            nr=nr*10+(int)s[i]-'0';
            i++;
        }
        if(s[i]=='-')
            sgn = false;
        if(s[i]=='+')
            sgn = true;
        if(s[i]=='x' || s[i]=='y' || s[i]=='z')
            {
                if(nr == 0)
                {
                    if(sgn)
                        f[s[i]]++ , nr = 0;
                    else
                        f[s[i]]-- , nr = 0;
                }
                if(sgn)
                    f[s[i]]+=nr , nr = 0;
                else
                    f[s[i]]-=nr , nr = 0;
            }
        i++;
    }
    char rez;
    int max = -2000000001;
    for(char i = 'x' ; i <= 'z' ; ++i)
    {
        if(f[i]>max && f[i]!=0)
            max=f[i] , rez = i;
    }
    cout << max << rez;
    return 0;
}
Comentarii

S-ar putea sa iti placa