Pesquisar este blog

Livros Recomendados

Mostrando postagens com marcador 1255. Mostrar todas as postagens
Mostrando postagens com marcador 1255. Mostrar todas as postagens

sábado, 30 de janeiro de 2021

URI (BEECROWD) - 1255 - Frequência de Letras - Strings - C

Plataforma: URI
Problema1255

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


Solução:

#include <stdio.h>
#include <string.h>
int main() {
    char alfabeto[27] = "abcdefghijklmnopqrstuvwxyz";
    char palavra[256];
    int frequencia[26];
    int n, i, j, maior;
    scanf("%d ", &n);
    while (n--) {
        scanf ("%[^\n]%*c", palavra);
        for (i = 0; i < 26; i++)
            frequencia[i] = 0;
        for (i = 0; i < strlen(palavra); i++) {
            for (j = 0; j < 26; j++) {
                if (palavra[i] == alfabeto[j] || palavra[i]+32 == alfabeto[j]) {
                    frequencia[j]++;
                    break;
                }
            }
        }
        maior = frequencia[0];
        for (i = 1; i < 26; i++)
            if (frequencia[i] > maior)
                maior = frequencia[i];
        for (i = 0; i < 26; i++)
            if (frequencia[i] == maior)
                printf("%c", alfabeto[i]);
        printf("\n");
    }
    return 0;
}

URI (BEECROWD) - 1255 - Frequência de Letras - Strings - C++ - Solução Alternativa

Nova solução!

Fala, pessoal, tudo beleza? Em alguns exercícios postarei também soluções alternativas. Elas terão alguma diferença para a outra solução que postei, seja num método, uma estrutura, um operador ou até mesmo aplicando uma lógica diferente! Confira essa solução para o problema de Freqência de Letras em C++!

Plataforma: URI (BEECROWD)
Problema1255

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++

Solução:

#include <iostream>
using namespace std;
int main() {
    string alfabeto = "abcdefghijklmnopqrstuvwxyz";
    string palavra;
    int frequencia[26];
    int n, i, maior, tam;
    cin >> n;
    cin.ignore();
    while (n--) {
        getline(cin, palavra);
        for (i = 0; i < 26; i++)
            frequencia[i] = 0;
        tam = palavra.size();
        for (i = 0; i < tam; i++) {
            for (int j = 0; j < 26; j++) {
                if (palavra[i] == alfabeto[j] || palavra[i]+32 == alfabeto[j]) {
                    frequencia[j]++;
                    break;
                }
            }
        }
        maior = frequencia[0];
        for (i = 1; i < 26; i++)
            if (frequencia[i] > maior)
                maior = frequencia[i];
        for (i = 0; i < 26; i++)
            if (frequencia[i] == maior)
                cout << alfabeto[i];
        cout << endl;
    }
    return 0;
}

quinta-feira, 20 de agosto de 2020

URI - 1255 - Frequência de Letras - Strings - C++

Plataforma: URI
Problema1255

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++

Solução:
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;
}

Postagem em destaque

URI (BEECROWD) - 2158 - Helping Uncle Cláudio (Ajudando o Tio Cláudio) - Matemática - C, C++ e Haskell

Buenas! Estou aqui mais uma vez para resolver um problema de Matemática! Agora tenho resolvido alguns dessa categoria, pra que vocês possam ...

Postagens mais visitadas