Crie um programa e um algoritmo para listar os 1000 primeiros números felizes.

Números Felizes

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.

 

Exemplo em C#

/*
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.

 

Exemplo em C++

/***************************************************************************

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.

 

Exemplo em Python

'''

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!

  • Publicado por Giovani Da Cruz
  • 26 views
  • 0 comentarios
  • 4 de dezembro de 2023

 

Está gostando do conteúdo?
Considere pagar um cafezinho para nossa equipe!

 

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Posts Relacionados a Categoria Algoritmos com Laços

Continue aprendendo

Aumente o seu conhecimento
Crie um algoritmo e um programa que leia 5 números e escreva o maior e o menor desses 5 números, nessa ordem.
29 de abril de 2024
Crie um algoritmo e um programa que leia 5 números e informe o maior número
10 de abril de 2024
Crie um algoritmo e um programa que solicite ao usuário digitar seis números inteiros. O programa deverá somar os valores pares informados e mostrar o resultado desta soma na tela.
18 de fevereiro de 2024
Crie um algoritmo e um programa em que solicite ao usuário digitar sete números inteiros. O programa deverá contar e mostrar na tela a quantidade de valores ímpares informados.
15 de fevereiro de 2024
Crie um algoritmo e um programa que leia 5 números e mostre o maior e o menor.
5 de fevereiro de 2024
Crie um programa e um algoritmo para listar os 1000 primeiros números primos.
23 de janeiro de 2024
Crie um programa e um algoritmo para listar os 4 primeiros números perfeitos.
19 de janeiro de 2024
Crie um algoritmo e um programa para descobrir os 100 primeiros naturais que possuam raízes quadradas inteiras
28 de novembro de 2023
Exercício de algoritmo: Sequência de Fibonacci
24 de novembro de 2023
Exemplo de como simular uma barra de progresso em modo console
15 de novembro de 2023