Lógica, perguntado por owlubs, 3 meses atrás

Escreva um algoritimo em português estruturado (ou em uma linguagem de
programação de sua preferência) capaz de identificar a(s) letra(s) mais frequente(s) em
uma cadeia de caracteres. A entrada será uma cadeia de caracteres sem espaços de no
máximo 1000 caracteres. A saída deverá ser uma lista com as letra(s) seguida por sua
porcentagem com duas casas decimais, deve ser ordenada pela porcentagem do maior
para o menor. Deve-se desconsiderar diferenças de maiúsculas e minúsculas. Qualquer
outro caractere que não seja uma letra de A a Z deverá ser desconsiderado.
Exemplo:
Entrada: Arara
Saída:
a = 60%
r = 40%

Gente alguém pode me ajudar nesse?

Soluções para a tarefa

Respondido por ljmicheleto
1

Resposta:

Solução em C#

Explicação:

using System;

using System.Collections.Generic;

using System.Text.RegularExpressions;

using System.Linq;

class Program

{

   static void Main(string[] args)

   {

       var palavra = "Arara";

       var countLetters = GetLettersFrequency(palavra);

       PrintLetterFreq(countLetters);

       Console.ReadKey();

   }

   private static void PrintLetterFreq(Dictionary<char, int> countLetters)

   {

       float total = countLetters.Values.Sum();

       foreach (var key in countLetters.Keys.OrderByDescending(k => countLetters[k]))

       {

           Console.WriteLine($"{key}={countLetters[key]/total*100f:#.##}%");

       }

   }

   static Dictionary<char, int> GetLettersFrequency(string word)

   {

       var countLetters = new Dictionary<char, int>();

       var regexLetters = new Regex(@"[a-z]");

       regexLetters.Matches(word.ToLower()).AsEnumerable().Select(m => m.Value.ToCharArray()[0])

       .ToList().ForEach(a =>

       {

           if (countLetters.ContainsKey(a))

           {

               countLetters[a]++;

           }

           else

           {

               countLetters.Add(a, 1);

           }

       });

       return countLetters;

   }

}

Perguntas interessantes