Contar números unarios en un rango

Dados dos números A y B, A<=B, la tarea es encontrar el número de números unarios entre A y B, ambos inclusive.
Número unario : Considere el número 28. Si tomamos la suma de los cuadrados de sus dígitos, 2*2 + 8*8, obtenemos 68. Tomando la suma de los cuadrados de los dígitos nuevamente, obtenemos 6*6 + 8*8= 100. Haciendo esto de nuevo, obtenemos 1*1 + 0*0 + 0*0 = 1. Cualquier número de este tipo, que finalmente conduce a 1, se llama número unario.

Ejemplos: 
 

Input : A = 1, B = 10
Output : 3

Input : A = 100, B = 150
Output : 7

La idea es calcular recursivamente la suma de los cuadrados de los dígitos del número y cada vez que se repite, reemplazar el número con la suma calculada.
Los casos base de la recursión serán: 
 

  • Si la suma se reduce a 1 o a 7, entonces la respuesta es verdadera.
  • Si la suma se reduce a un número entero de un solo dígito distinto de 1 y 7, la respuesta es falsa.

A continuación se muestra la implementación recursiva de este problema:
 

C++

// CPP program to count unary numbers
// in a range
  
#include <iostream>
using namespace std;
  
// Function to check if a number is unary
bool isUnary(int n)
{
    /// Base case. Note that if we repeat
    // above process for 7, we get 1.
    if (n == 1 || n == 7)
        return true;
    else if (n / 10 == 0)
        return false;
  
    /// rec case
    int x, sum = 0;
    while (n != 0) {
        x = n % 10;
        sum = sum + x * x;
        n = n / 10;
    }
  
    isUnary(sum);
}
  
// Function to count unary numbers
// in a range
int countUnary(int a, int b)
{
    int count = 0;
  
    for (int i = a; i <= b; i++) {
        if (isUnary(i) == 1)
            count++;
    }
  
    return count;
}
  
// Driver Code
int main()
{
    int a = 1000, b = 1099;
  
    cout << countUnary(a, b);
  
    return 0;
}

Java

//Java program to count unary numbers
// in a range
  
import java.io.*;
  
class GFG {
      
// Function to check if a number is unary
static boolean isUnary(int n)
{
    /// Base case. Note that if we repeat
    // above process for 7, we get 1.
    if (n == 1 || n == 7)
        return true;
    else if (n / 10 == 0)
        return false;
  
    /// rec case
    int x, sum = 0;
    while (n != 0) {
        x = n % 10;
        sum = sum + x * x;
        n = n / 10;
    }
  
return isUnary(sum);
}
  
// Function to count unary numbers
// in a range
static int countUnary(int a, int b)
{
    int count = 0;
  
    for (int i = a; i <= b; i++) {
        if (isUnary(i) == true)
            count++;
    }
  
    return count;
}
  
// Driver Code
      
    public static void main (String[] args) {
      
      
    int a = 1000, b = 1099;
    System.out.println (countUnary(a, b));
  
    }
//This code is contributed by ajit    
}

Python3

# Python 3 program to count unary numbers
# in a range
  
# Function to check if a number is unary
def isUnary(n):
      
    # Base case. Note that if we repeat
    # above process for 7, we get 1.
    if (n == 1 or n == 7):
        return True
    elif (int(n / 10) == 0):
        return False
  
    # rec case
    sum = 0
    while (n != 0):
        x = n % 10
        sum = sum + x * x
        n = int(n / 10)
  
    return isUnary(sum)
  
# Function to count unary numbers
# in a range
def countUnary(a, b):
    count = 0
  
    for i in range(a, b + 1, 1):
        if (isUnary(i) == 1):
            count += 1
  
    return count
  
# Driver Code
if __name__ == '__main__':
    a = 1000
    b = 1099
  
    print(countUnary(a, b))
      
# This code is contributed by
# Sanjit_Prasad

C#

//C# program to count unary numbers
// in a range
using System;
                      
   
public class GFG {
       
// Function to check if a number is unary
static bool isUnary(int n)
{
    /// Base case. Note that if we repeat
    // above process for 7, we get 1.
    if (n == 1 || n == 7)
        return true;
    else if (n / 10 == 0)
        return false;
   
    /// rec case
    int x, sum = 0;
    while (n != 0) {
        x = n % 10;
        sum = sum + x * x;
        n = n / 10;
    }
   
return isUnary(sum);
}
   
// Function to count unary numbers
// in a range
static int countUnary(int a, int b)
{
    int count = 0;
   
    for (int i = a; i <= b; i++) {
        if (isUnary(i) == true)
            count++;
    }
   
    return count;
}
   
// Driver Code
       
    public static void Main () {
       
       
    int a = 1000, b = 1099;
    Console.WriteLine(countUnary(a, b));
   
    }
//This code is contributed by 29AjayKumar 
}

Javascript

<script>
  
    // Javascript program to count unary
    // numbers in a range
      
    // Function to check if a number is unary
    function isUnary(n)
    {
        /// Base case. Note that if we repeat
        // above process for 7, we get 1.
        if (n == 1 || n == 7)
            return true;
        else if (parseInt(n / 10, 10) == 0)
            return false;
  
        /// rec case
        let x, sum = 0;
        while (n != 0) {
            x = n % 10;
            sum = sum + x * x;
            n = parseInt(n / 10, 10);
        }
  
        return isUnary(sum);
    }
  
    // Function to count unary numbers
    // in a range
    function countUnary(a, b)
    {
        let count = 0;
  
        for (let i = a; i <= b; i++) {
            if (isUnary(i) == true)
                count++;
        }
  
        return count;
    }
      
    let a = 1000, b = 1099;
    document.write(countUnary(a, b));
                                   
</script>
Producción: 

13

 

Publicación traducida automáticamente

Artículo escrito por Kushdeep_Mittal 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 *