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; }