números felices

Un número feliz n se define mediante el siguiente proceso. Comenzando con n, reemplácelo con la suma de los cuadrados de sus dígitos y repita el proceso hasta que n sea igual a 1, o se repite sin fin en un ciclo que no incluye 1. Los números para los que este proceso termina en 1 son Números Felices , mientras que los que no terminan en 1 son números infelices.
Los primeros números felices son 1, 7, 10, 13, 19, 23, 28, 31, 32, 44, 49, 68, 70, 79, 82, 86, 91, 94, 97, 100
Ejemplos: 
 

Input :  23
Output : Yes
Explanation : 
First Iteration:
22 + 32 = 4 + 9 = 13
Second Iteration:
12 + 32 = 1 + 9 = 10
Third Iteration:
12 + 02 = 1 + 0 = 1
Since we reach 1, 23 is Happy.

La idea es simple, repetimos hacer suma de cuadrados de dígitos. Al hacerlo, hacemos un seguimiento de los números visitados mediante un hash. Si llegamos a 1, devolvemos verdadero. De lo contrario, si llegamos a un número visitado, devolvemos falso.
 

C++

// CPP program to check if a number
// is happy number
#include <bits/stdc++.h>
using namespace std;
 
// Returns sum of squares of digits
// of a number n. For example for n = 12
// it returns 1 + 4 = 5
int sumDigitSquare(int n)
{
    int sq = 0;
    while (n) {
        int digit = n % 10;
        sq += digit * digit;
        n = n / 10;
    }
    return sq;
}
 
// Returns true if n is Happy number
// else returns false.
bool isHappy(int n)
{
    // A set to store numbers during
    // repeated square sum process
    set<int> s;
    s.insert(n);
 
    // Keep replacing n with sum of
    // squares of digits until we either
    // reach 1 or we endup in a cycle
    while (1) {
 
        // Number is Happy if we reach 1
        if (n == 1)
            return true;
 
        // Replace n with sum of squares
        // of digits
        n = sumDigitSquare(n);
 
        // If n is already visited, a cycle
        // is formed, means not Happy
        if (s.find(n) != s.end())
            return false;
 
        // Mark n as visited
        s.insert(n);
    }
 
    return false;
}
 
// Driver code
int main()
{
    int n = 23;
    if (isHappy(n))
        cout << "Yes" << endl;
    else
        cout << "No" << endl;
    return 0;
}

Java

// Java program to check if a number
// is happy number
import java.util.*;
 
class GFG
{
 
// Returns sum of squares of digits
// of a number n. For example for n = 12
// it returns 1 + 4 = 5
static int sumDigitSquare(int n)
{
    int sq = 0;
    while (n > 0)
    {
        int digit = n % 10;
        sq += digit * digit;
        n = n / 10;
    }
    return sq;
}
 
// Returns true if n is Happy number
// else returns false.
static boolean isHappy(int n)
{
    // A set to store numbers during
    // repeated square sum process
    HashSet<Integer> s = new HashSet<Integer>();
    s.add(n);
 
    // Keep replacing n with sum of
    // squares of digits until we either
    // reach 1 or we endup in a cycle
    while (true)
    {
 
        // Number is Happy if we reach 1
        if (n == 1)
            return true;
 
        // Replace n with sum of squares
        // of digits
        n = sumDigitSquare(n);
 
        // If n is already visited, a cycle
        // is formed, means not Happy
         
        if ((s.contains(n) && n != (int)s.toArray()[ s.size()-1 ] ))
            return false;
 
        // Mark n as visited
        s.add(n);
    }
}
 
// Driver code
public static void main(String[] args)
{
    int n = 23;
    if (isHappy(n))
        System.out.println("Yes");
    else
        System.out.println("No");
}
}
 
/* This code contributed by PrinciRaj1992 */

Python 3

# python program to check if a number
# is happy number
 
 
# Returns sum of squares of digits
# of a number n. For example for n = 12
# it returns 1 + 4 = 5
def sumDigitSquare( n):
    sq = 0;
    while (n!=0):
        digit = n % 10
        sq += digit * digit
        n = n // 10
         
    return sq;
 
 
# Returns true if n is Happy number
# else returns false.
def isHappy(n):
    # A set to store numbers during
    # repeated square sum process
    s=set()
    s.add(n)
 
    # Keep replacing n with sum of
    # squares of digits until we either
    # reach 1 or we endup in a cycle
    while (True):
 
        # Number is Happy if we reach 1
        if (n == 1):
            return True;
 
        # Replace n with sum of squares
        # of digits
        n = sumDigitSquare(n)
 
        # If n is already visited, a cycle
        # is formed, means not Happy
        if n in s:
            return False
 
        # Mark n as visited
        s.add(n)
 
    return false;
 
 
# Driver code
 
n = 4
if (isHappy(n)):
    print("Yes")
else:
    print("No")

C#

// C# program to check if a number
// is happy number
using System;
using System.Collections.Generic;
 
class GFG
{
 
// Returns sum of squares of digits
// of a number n. For example for n = 12
// it returns 1 + 4 = 5
static int sumDigitSquare(int n)
{
    int sq = 0;
    while (n > 0)
    {
        int digit = n % 10;
        sq += digit * digit;
        n = n / 10;
    }
    return sq;
}
 
// Returns true if n is Happy number
// else returns false.
static bool isHappy(int n)
{
    // A set to store numbers during
    // repeated square sum process
    HashSet<int> s = new HashSet<int>();
    s.Add(n);
 
    // Keep replacing n with sum of
    // squares of digits until we either
    // reach 1 or we endup in a cycle
    while (true)
    {
 
        // Number is Happy if we reach 1
        if (n == 1)
            return true;
 
        // Replace n with sum of squares
        // of digits
        n = sumDigitSquare(n);
 
        // If n is already visited, a cycle
        // is formed, means not Happy
        if (s.Contains(n))
            return false;
 
        // Mark n as visited
        s.Add(n);
    }
}
 
// Driver code
public static void Main()
{
    int n = 23;
    if (isHappy(n))
        Console.WriteLine("Yes");
    else
        Console.WriteLine("No");
}
}
 
// This code contributed by Rajput-Ji

Javascript

// JavaScript program to check if a number
// is happy number
 
// Returns sum of squares of digits
// of a number n. For example for n = 12
// it returns 1 + 4 = 5
function sumDigitSquare(n)
{
    let sq = 0;
    while (n > 0)
    {
        var digit = n % 10
        sq += digit * digit;
        n = Math.floor(n / 10);
    }
         
    return sq;
}
 
// Returns true if n is Happy number
// else returns false.
function isHappy(n)
{
    // A set to store numbers during
    // repeated square sum process
    let s = [];
    s.push(n);
 
    // Keep replacing n with sum of
    // squares of digits until we either
    // reach 1 or we endup in a cycle
    while (true)
    {
        // Number is Happy if we reach 1
        if (n == 1)
            return true;
 
        // Replace n with sum of squares
        // of digits
        n = sumDigitSquare(n)
         
         
        // If n is already visited, a cycle
        // is formed, means not Happy
        if (s.includes(n))
            return false
     
        // Mark n as visited
        s.push(n)
    }
    return false;
}
 
/// Driver code
let n = 23
if (isHappy(n))
    console.log("Yes")
else
    console.log("No")
 
// This code is contributed by phasing17

Producción:  

Yes

Una observación importante es que el ciclo siempre contiene 4 . Así que no necesitamos hacer un seguimiento de todos los números. Simplemente podemos verificar 4. 
 

C++

// A space optimized CPP program to check if a number is
// happy number
#include <bits/stdc++.h>
using namespace std;
 
// Returns sum of squares of digits of a number n.
// For example for n = 12 it returns 1 + 4 = 5
int sumDigitSquare(int n)
{
    int sq = 0;
    while (n) {
        int digit = n % 10;
        sq += digit * digit;
        n = n / 10;
    }
    return sq;
}
 
// Returns true if n is Happy number else returns false.
bool isHappy(int n)
{
    // Keep replacing n with sum of squares of digits until
    // we either reach 1 or we end up in a cycle
    while (1) {
        // Number is Happy if we reach 1
        if (n == 1)
            return true;
        // Replace n with sum of squares of digits
        n = sumDigitSquare(n);
        // Number is not Happy if we reach 4
        if (n == 4)
            return false;
    }
    return false;
}
 
// Driver code
int main()
{
    int n = 23;
    if (isHappy(n))
        cout << "Yes" << endl;
    else
        cout << "No" << endl;
    return 0;
}
 
// This code is contributed by Sania Kumari Gupta (kriSania804)

C

// A space optimized C program to check if a number is happy
// number
#include <stdbool.h>
#include <stdio.h>
 
// Returns sum of squares of digits of a number n.
// For example for n = 12 it returns 1 + 4 = 5
int sumDigitSquare(int n)
{
    int sq = 0;
    while (n) {
        int digit = n % 10;
        sq += digit * digit;
        n = n / 10;
    }
    return sq;
}
 
// Returns true if n is Happy number else returns false.
bool isHappy(int n)
{
    // Keep replacing n with sum of squares of digits until
    // we either reach 1 or we end up in a cycle
    while (1) {
        // Number is Happy if we reach 1
        if (n == 1)
            return true;
        // Replace n with sum of squares of digits
        n = sumDigitSquare(n);
        // Number is not Happy if we reach 4
        if (n == 4)
            return false;
    }
    return false;
}
 
// Driver code
int main()
{
    int n = 23;
    if (isHappy(n))
        printf("Yes\n");
    else
        printf("No\n");
    return 0;
}
 
// This code is contributed by Sania Kumari Gupta (kriSania804)

Java

// A space optimized Java
// program to check if a
// number is happy number
import java.io.*;
 
class GFG {
     
    // Returns sum of squares of
    // digits of a number n. For
    // example for n = 12 it
    // returns 1 + 4 = 5
    static int sumDigitSquare(int n)
    {
        int sq = 0;
        while (n != 0)
        {
            int digit = n % 10;
            sq += digit * digit;
            n = n / 10;
        }
        return sq;
    }
     
    // Returns true if n is Happy
    // number else returns false.
    static boolean isHappy(int n)
    {
        // Keep replacing n with
        // sum of squares of digits
        // until we either reach 1
        // or we end up in a cycle
        while (true)
        {
     
            // Number is Happy if
            // we reach 1
            if (n == 1)
                return true;
     
            // Replace n with sum
            // of squares of digits
            n = sumDigitSquare(n);
     
            // Number is not Happy
            // if we reach 4
            if (n == 4)
                return false;
        }
     
    }
     
    // Driver code
    public static void main(String args[])
    {
        int n = 23;
        if (isHappy(n))
            System.out.println("Yes");
        else
            System.out.println("No" );
    }
}
 
/*This code is contributed by Nikita tiwari.*/

Python3

# A space optimized Python3 program to
# check  if a number is happy number
 
 
# Returns sum of squares of
# digits of a number n. For
# example for n = 12 it
# returns 1 + 4 = 5
def sumDigitSquare(n) :
    sq = 0
    while (n) :
        digit = n % 10
        sq = sq + digit * digit
        n = n // 10
     
    return sq
 
 
# Returns true if n
# is Happy number else
# returns false.
def isHappy(n) :
 
    # Keep replacing n with
    # sum of squares of digits
    # until we either reach 1
    # or we end up in a cycle
    while (1) :
 
        # Number is Happy if
        # we reach 1
        if (n == 1) :
            return True
 
        # Replace n with sum of
        # squares of digits
        n = sumDigitSquare(n)
 
        # Number is not Happy
        # if we reach 4
        if (n == 4) :
            return False
     
    return False
 
# Driver code
n = 23
if (isHappy(n)) :
    print("Yes")
else :
    print("No")
     
 
# This code is contributed
# by Nikita tiwari.

C#

// A space optimized C#
// program to check if a
// number is happy number
using System;
 
class GFG
{
     
// Returns sum of squares of
// digits of a number n. For
// example for n = 12 it
// returns 1 + 4 = 5
static int sumDigitSquare(int n)
{
    int sq = 0;
    while (n != 0)
    {
        int digit = n % 10;
        sq += digit * digit;
        n = n / 10;
    }
    return sq;
}
 
// Returns true if n is Happy
// number else returns false.
static bool isHappy(int n)
{
    // Keep replacing n with
    // sum of squares of digits
    // until we either reach 1
    // or we end up in a cycle
    while (true)
    {
 
        // Number is Happy if
        // we reach 1
        if (n == 1)
            return true;
 
        // Replace n with sum
        // of squares of digits
        n = sumDigitSquare(n);
 
        // Number is not Happy
        // if we reach 4
        if (n == 4)
            return false;
    }
 
}
 
// Driver code
static public void Main ()
{
    int n = 23;
    if (isHappy(n))
        Console.WriteLine("Yes");
    else
        Console.WriteLine("No" );
}
}
 
// This code is contributed by ajit

PHP

<?php
// A space optimized PHP
// program to check if a
// number is happy number
 
// Returns sum of squares
// of digits of a number
// n. For example for n = 12
// it returns 1 + 4 = 5
function sumDigitSquare($n)
{
    $sq = 0;
    while ($n)
    {
        $digit = $n % 10;
        $sq += $digit * $digit;
        $n = $n / 10;
    }
    return $sq;
}
 
// Returns true if n
// is Happy number
// else returns false.
function isHappy($n)
{
    // Keep replacing n with
    // sum of squares of digits
    // until we either reach 1
    // or we end up in a cycle
    while (1)
    {
 
        // Number is Happy
        // if we reach 1
        if ($n == 1)
            return true;
 
        // Replace n with sum
        // of squares of digits
        $n = sumDigitSquare($n);
 
        // Number is not Happy
        // if we reach 4
        if ($n == 4)
            return false;
    }
 
    return false;
}
 
// Driver code
$n = 23;
if (isHappy($n))
    echo "Yes";
else
    echo "No";
 
// This code is contributed by mits
?>

Javascript

<script>
 
    // A space optimized Javascript
    // program to check if a
    // number is happy number
     
    // Returns sum of squares of
    // digits of a number n. For
    // example for n = 12 it
    // returns 1 + 4 = 5
    function sumDigitSquare(n)
    {
        let sq = 0;
        while (n != 0)
        {
            let digit = n % 10;
            sq += digit * digit;
            n = parseInt(n / 10, 10);
        }
        return sq;
    }
 
    // Returns true if n is Happy
    // number else returns false.
    function isHappy(n)
    {
        // Keep replacing n with
        // sum of squares of digits
        // until we either reach 1
        // or we end up in a cycle
        while (true)
        {
 
            // Number is Happy if
            // we reach 1
            if (n == 1)
                return true;
 
            // Replace n with sum
            // of squares of digits
            n = sumDigitSquare(n);
 
            // Number is not Happy
            // if we reach 4
            if (n == 4)
                return false;
        }
 
    }
     
    let n = 23;
    if (isHappy(n))
        document.write("Yes");
    else
        document.write("No" );
 
</script>

Producción:  

Yes

Complejidad del tiempo : O (log N) donde N no es ningún dígito de un número dado n

Espacio auxiliar : O(1)
Este artículo es una contribución de ashish madaan . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
 

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *