Problema: 1255
Enunciado:
Neste problema estamos interessados na frequência das letras em uma dada linha de texto. Especificamente, deseja-se saber qual(is) a(s) letra(s) de maior frequência do texto, ignorando o “case sensitive”, ou seja maiúsculas ou minúsculas (sendo mais claro, “letras” referem-se precisamente às 26 letras do alfabeto).
Linguagem: C++
Cada linha é percorrida e a cada caracter é verificado se é uma letra do alfabeto (em minúscula). Caso seja, é adicionado a um mapa. Ao final, o mapa é percorrido imprimindo as letras que possuem a quantidade de casos máximo. É importante notar que a estrutura map é sempre ordenada.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | #include <iostream> #include <map> using namespace std; char toLower(char aux){ if(aux >= 'A' and aux <= 'Z') return aux - 'A' + 'a'; return aux; } char isLetter(char aux){ if(aux >= 'a' and aux <= 'z') return true; else return false; } int main() { std::map<char,int> mymap; std::map<char,int>::iterator it; string line; getline(cin, line); while(getline(cin, line)){ mymap.clear(); int max = 0; for(int i=0; i<line.length();i++){ char letter = toLower(line[i]); if(isLetter(letter)){ mymap[letter]++; if(mymap[letter] > max) max = mymap[letter]; } } for (it=mymap.begin(); it!=mymap.end(); it++) if(it->second == max) cout << it->first; cout << endl; } return 0; } |
Nenhum comentário:
Postar um comentário