Advertisement
Hezov

Pbinfo #879

Jul 1st, 2025
468
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.41 KB | None | 0 0
  1. #include <fstream>
  2. #include <cstring>
  3. using namespace std;
  4. ifstream cin("egalitati.in");
  5. ofstream cout("egalitati.out");
  6. struct ecuatie{char var1[30], op, var2[30]; }v[27];
  7. int sol[27];
  8. char s[150];
  9. int getNum(char s[])
  10. {
  11.     int sol = 0;
  12.     for(int i = 0;s[i]!=0;i++)
  13.         sol = sol * 10 + (s[i]-'0');
  14.     return sol;
  15. }
  16. void solve(int poz)
  17. {
  18.     int nr1 = 0, nr2 = 0;
  19.     if('a' <= v[poz].var1[0] && v[poz].var1[0] <= 'z')
  20.     {
  21.         solve(v[poz].var1[0] - 'a');
  22.         nr1 = sol[v[poz].var1[0] - 'a'];
  23.     }
  24.     else nr1 = getNum(v[poz].var1);
  25.     if(v[poz].op != 0)
  26.     {
  27.         if('a' <= v[poz].var2[0] && v[poz].var2[0] <= 'z')
  28.         {
  29.             solve(v[poz].var2[0] - 'a');
  30.             nr2 = sol[v[poz].var2[0] - 'a'];
  31.         }
  32.         else nr2 = getNum(v[poz].var2);
  33.  
  34.         if(v[poz].op == '+')
  35.         {
  36.             sol[poz] = nr1 + nr2;
  37.             return;
  38.         }
  39.         if(v[poz].op == '*')
  40.         {
  41.             sol[poz] = nr1 * nr2;
  42.             return;
  43.         }
  44.     }
  45.     else
  46.     {
  47.         sol[poz] = nr1;
  48.         return;
  49.     }
  50.  
  51. }
  52. int main()
  53. {
  54.     for(int i = 0;i<26;i++)
  55.         sol[i] = -1;
  56.     int n;
  57.     cin >> n ;
  58.     cin.get();
  59.     for(int i = 1;i <= n;i++)
  60.     {
  61.         cin.getline(s,100);
  62.         int poz = s[0] - 'a', cnt = 1;
  63.         for(int it = 1;s[it]!=0;it++)
  64.         {
  65.             if(s[it] == ' ' || s[it] == '=')
  66.                 continue;
  67.             if(cnt == 1)
  68.             {
  69.                 while(s[it] != ' ' && s[it] != '+' && s[it] != '*' && s[it]!=0)
  70.                     v[poz].var1[strlen(v[poz].var1)] = s[it], it++;
  71.                 it--;
  72.                 cnt++;
  73.             }
  74.             else if(cnt == 2)
  75.             {
  76.                 if((s[it] == '+' || s[it] == '*') && s[it]!=0)
  77.                     v[poz].op = s[it], it++;
  78.                 it--;
  79.                 cnt++;
  80.             }
  81.             else if(cnt == 3)
  82.             {
  83.                 while(s[it] != ' ' && s[it]!=0)
  84.                     v[poz].var2[strlen(v[poz].var2)] = s[it], it++;
  85.                 it--;
  86.                 cnt++;
  87.             }
  88.         }
  89.         for(int it = 0;it<100;it++)
  90.             s[it] = 0;
  91.     }
  92.     for(int i = 0;i<26;i++)
  93.         if(sol[i] == -1 && strlen(v[i].var1) != 0)
  94.             solve(i);
  95.     for(int i = 0;i<26;i++)
  96.         if(sol[i] != -1)
  97.             cout <<(char)(i+'a') << " = " << sol[i] << '\n';
  98.     return 0;
  99. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement