Joãozinho está aprendendo a ler e escrever. Durante um exercício de leitura, percebeu a existência de um conceito que ele não sabe identificar: as palavras RUMO e MURO possuem as mesmas letras, mas em posições diferentes. Ele começa a se questionar quantas palavras podem existir somente trocando essas letras de lugar. Sem saber, Joãozinho acabou de descobrir o conceito dos anagramas. Anagramas são todas as permutações possíveis das palavras trocando apenas as letras de posições.
Douglas vendo a curiosidade do irmão e como estudante de ciências da computação quis elaborar o seguinte programa para ajudá-lo a encontrar todas as possibilidades de anagramas com o seguinte pseudocódigo(imagem):
Caso Joãozinho utilize o algoritmo abaixo para com o seu próprio apelido, que possui 9 letras, quantas vezes a função PERMUTAÇÃO deve ser chamada:
Soluções para a tarefa
Como o algoritmo de Douglas apresenta um erro estrutural, então, independente da quantidade de vezes que a função for chamada, ela não retornará o valor correto para Joãozinho.
Para realizar este exercício vamos relembrar a estrutura dos anagramas.
Anagramas
Assim denominamos todas as combinações possíveis (porém que resultam em diferentes resultados) feitas entre as letras de uma palavra.
Se todas as N letras forem diferentes, então teremos uma multiplicação da forma N * (N-1) * (N-2) * ... * 2 * 1, que pode ser reescrita na forma de N!
ex. perigo (6! = 720)
Se tivermos 1 letra que se repete 2 vezes () então teremos de dividir N! pelo número de combinações repetidas, ou seja, aquelas resultantes das trocas entre aquele par de letras (2!).
ex. arroz (4! / 2! = 24 / 2 = 12)
Se tivermos 2 letras que se repetem 2 e 3 vezes respectivamente então, de semelhante forma, teremos de dividir N! pelo número de combinações repetidas.
ex. arara (5! / (2! * 3!)) = 120 / 12 = 10
Joãozinho
Analisando o apelido de Joãozinho podemos observar que a letra "o" se repete 3 vezes, sendo a única que se repete. Sendo assim teremos:
9! /3! = 362.880 / 6 = 60.840
O algoritmo de Douglas
Analisando o algoritmo dado, notamos que ao colocar ali seu apelido, Joãozinho receberá o seguinte número na tela:
8 * 9 = 72
O que é bem diferente do 60.840 que encontramos.
Conclusão
O algoritmo de Douglas precisa ser reescrito para, ao invés de (N - 1) * N ele faça N! e de alguma forma também pergunte quantas letras diferentes se repetem e quantas vezes elas se repetem para poder realizar a divisão corretamente e encontrar a resposta correta.
Continue estudando sobre anagramas aqui: https://brainly.com.br/tarefa/112899
#SPJ9