fbpx

Problema #857 – Multimi4 – Rezolvari PBInfo

0

Cerința

Gigel învaţă la matematică despre mulţimi. A scris pe foaie o mulţime formată din litere mari şi mici ale alfabetului englez, considerate identice. A separat elementele cu virgule (,) şi a delimitat mulţimea cu acolade. Din păcate, în mulţimea scrisă de Gigel se pot repeta litere, sau pot să apară şi litera mare şi litera mică. Gigel vă roagă să-l ajutaţi să corecteze acea mulţime, adică:

  • să eliminaţi dublurile;
  • să ordonaţi alfabetic elementele;
  • dacă cel puţin jumătate dintre elementele iniţiale sunt litere mari, să transformaţi toate elementele în litere mari; în caz contrar să transformaţi toate elementele în litere mici.

Date de intrare

Programul citește de la tastatură mulţimea iniţială.

Date de ieșire

Programul va afișa pe ecran mulţimea corectată, delimitată de acolade şi cu elementele separate prin câte o virgulă.

Restricții și precizări

  • numărul total de caractere din mulţimea dată este cel mult 255

Exemplu

Intrare

{b, A, C,  a}

Ieșire

{A,B,C}

Explicație

S-au afişat litere mari deoarece numărul de elemente litere mari este 2, adică cel puţin jumătate din numărul total de elemente ale mulţimii iniţiale – 4.

#include <bits/stdc++.h>

using namespace std;

int f[300];

bool litmica(char ch)
{
    return ch >= 'a' && ch <= 'z';
}

bool litmare(char ch)
{
    return ch >= 'A' && ch <= 'Z';
}

int main()
{
    char s[300];
    cin.getline(s , 300);
    int i = 0;
    int cnt1 = 0 , cnt2 = 0;
    while(s[i]!='\0')
    {
        if(litmica(s[i]))
            cnt1++ , f[(int)s[i]]++;
        if(litmare(s[i]))
            cnt2++ , f[(int)tolower(s[i])]++;
        i++;
    }
    if(cnt1 > cnt2)
    {
        cout << '{';
        bool ok = false;
        for(int i = 0 ; i < 150 ; ++i)
        {
            if(f[i]!=0 && ok)
                cout << ',' << (char)i;
            else if(f[i]!=0)
                cout << (char)i , ok=true;
        }
        cout << '}';
    }
    else
    {
        cout << '{';
        bool ok = false;
        for(int i = 0 ; i < 150 ; ++i)
        {
            if(f[i]!=0 && ok)
                cout << ',' << (char) (i - 32);
            else if(f[i]!=0)
                cout << (char) (i - 32) , ok=true;
        }
        cout << '}';
    }
    return 0;
}
Comentarii
Se incarca comentariile...

This website uses cookies to improve your experience. We'll assume you're ok with this, but you can opt-out if you wish. Accept Read More