Fala galera da programação, tudo beleza?
Hoje vamos fazer um interessante exercício que envolve laços e cálculos. Vamos criar um programa para calcular os 1000 primeiros números felizes.
Para quem não sabe, na matemática, Os números felizes são definidos pelo seguinte procedimento. Começando com qualquer número inteiro positivo, o número é substituído pela soma dos quadrados dos seus dígitos, e repetir o processo até que o número seja igual a 1 ou até que ele entre num ciclo infinito que não inclui um ou seja a soma dos quadrados dos algarismos do quadrado de um número positivo inicial. Os números no fim do processo de extremidade com 1, são conhecidos como números felizes, mas aqueles que não terminam com um 1 são números chamados infelizes ou tristes.
/* Giovani Da Cruz */ using System; using System.Collections.Generic; class Program { static void Main() { List<int> numerosFelizes = ObterNumerosFelizes(1000); Console.WriteLine("Os primeiros 1000 números felizes são:"); foreach (int numero in numerosFelizes) { Console.WriteLine(numero); } Console.ReadLine(); // Aguarda pressionar Enter antes de fechar } static List<int> ObterNumerosFelizes(int quantidade) { List<int> numerosFelizes = new List<int>(); int numeroAtual = 1; while (numerosFelizes.Count < quantidade) { if (EhNumeroFeliz(numeroAtual)) { numerosFelizes.Add(numeroAtual); } numeroAtual++; } return numerosFelizes; } static bool EhNumeroFeliz(int n) { HashSet<int> numerosVistos = new HashSet<int>(); while (n != 1 && !numerosVistos.Contains(n)) { numerosVistos.Add(n); n = CalcularSomaDosQuadrados(n); } return n == 1; } static int CalcularSomaDosQuadrados(int n) { int soma = 0; while (n > 0) { int digito = n % 10; soma += digito * digito; n /= 10; } return soma; } }
Este programa utiliza uma função EhNumeroFeliz
para verificar se um número é feliz ou não. A função CalcularSomaDosQuadrados
é usada para calcular a soma dos quadrados dos dígitos de um número. O programa continua listando os números felizes até encontrar os primeiros 1000.
/*************************************************************************** Criado pelo Professo Giovani Da Cruz ****************************************************************************/ #include <iostream> #include <vector> #include <unordered_set> class felizes { public: static void Main() { std::vector<int> numerosFelizes = ObterNumerosFelizes(1000); std::cout << "Os primeiros 1000 números felizes são:" << std::endl; for (int numero : numerosFelizes) { std::cout << numero << std::endl; } std::cin.get(); // Aguarda pressionar Enter antes de fechar } static std::vector<int> ObterNumerosFelizes(int quantidade) { std::vector<int> numerosFelizes; int numeroAtual = 1; while (numerosFelizes.size() < quantidade) { if (EhNumeroFeliz(numeroAtual)) { numerosFelizes.push_back(numeroAtual); } numeroAtual++; } return numerosFelizes; } static bool EhNumeroFeliz(int n) { std::unordered_set<int> numerosVistos; while (n != 1 && numerosVistos.find(n) == numerosVistos.end()) { numerosVistos.insert(n); n = CalcularSomaDosQuadrados(n); } return n == 1; } static int CalcularSomaDosQuadrados(int n) { int soma = 0; while (n > 0) { int digito = n % 10; soma += digito * digito; n /= 10; } return soma; } }; /* Executando o programa */ int main() { felizes vProgram; vProgram.Main(); return 0; }
Este código C++ maném a mesma lógica e estrutura do programa em C#. Note que em C++, usamos std::vector
para substituir List
e std::unordered_set
para substituir HashSet
. Além disso, std::cin.get()
é utilizado para esperar que o usuário pressione Enter antes de fechar o programa.
''' Criado pelo Professo Giovani Da Cruz ''' def calcular_soma_dos_quadrados(n): soma = 0 while n > 0: digito = n % 10 soma += digito * digito n //= 10 return soma def eh_numero_feliz(n): numeros_vistos = set() while n != 1 and n not in numeros_vistos: numeros_vistos.add(n) n = calcular_soma_dos_quadrados(n) return n == 1 def obter_numeros_felizes(quantidade): numeros_felizes = [] numero_atual = 1 while len(numeros_felizes) < quantidade: if eh_numero_feliz(numero_atual): numeros_felizes.append(numero_atual) numero_atual += 1 return numeros_felizes def main(): numeros_felizes = obter_numeros_felizes(1000) print("Os primeiros 1000 números felizes são:") for numero in numeros_felizes: print(numero) input("Pressione Enter para fechar") if __name__ == "__main__": main()
Este código Python mantém a mesma lógica do código C#, utilizando listas, conjuntos e funções para calcular a soma dos quadrados e verificar se um número é feliz. O input
é utilizado para aguardar a pressão da tecla Enter antes de fechar o programa.
Beleza pessoal? Espero que tenham gostado.
Dúvidas ou sugestão de outras linguagens? Deixe o seu comentário!
Um abraço e até o próximo post. Valeu!
Está gostando do conteúdo?
Considere pagar um cafezinho para nossa equipe!