Comprobar si un número de móvil determinado es elegante

Dado un número de móvil y algunas condiciones para un número elegante, encuentre si el número dado es elegante. Un número de móvil de 10 dígitos se llama elegante si cumple alguna de las siguientes tres condiciones. 
 

  1. Un solo número aparece tres veces consecutivas. Como 777.
  2. Tres dígitos consecutivos están en forma creciente o decreciente. Como 456 o 987.
  3. Un solo dígito aparece cuatro o más veces en el número. Como 9859009976, aquí el dígito 9 aparece 4 veces.

Ejemplos: 
 

Entrada: 9859009976 
Salida: Sí 
El número de móvil proporcionado cumple la condición 
tres dada anteriormente.
Entrada: 7609438921 
Salida: No 
Ninguna de las tres condiciones dadas cumple.

La idea es convertir el número en una string usando to_string para que sea fácil de recorrer. Para que la condición tres cuente la frecuencia de cada número, se utiliza un concepto básico de hashing de strings.
Fuente: Conjunto de entrevistas de Oracle
A continuación se muestra la solución del problema anterior. 
 

C++

// C++ program to check if a given mobile
// number is fancy or not.
#include <bits/stdc++.h>
using namespace std;
 
// Returns true if s has three consecutive
// same digits.
bool cond1(string s)
{
    for (int i = 0; i < s.size() - 2; i++) {
        if (s[i] == s[i + 1] && s[i + 1] == s[i + 2])
            return true;
    }
    return false;
}
 
// Returns true if s has three increasing or
// decreasing digits.
bool cond2(string s)
{
    for (int i = 0; i < s.size() - 2; i++) {
        if ((s[i] < s[i + 1] && s[i + 1] < s[i + 2]) ||
            (s[i] > s[i + 1] && s[i + 1] > s[i + 2]))
            return true;
    }
    return false;
}
 
// Checks if a single digit occurs 4 times.
bool cond3(string s)
{
    int a[10];
    memset(a, 0, sizeof(a));
 
    for (int i = 0; i < s.size(); i++)
        a[s[i] - '0']++;
    
    for (int i = 0; i < 9; i++)
        if (a[i] >= 4)
            return true;
     
    return false;
}
 
bool isFancy(string s)
{
    if (cond1(s) || cond2(s) || cond3(s))
        return true;
    else
        return false;
}
 
// Driver condition
int main()
{
    long int n = 7609438921;
    string s = to_string(n);
    if (isFancy(s))
        cout << "Yes";
    else
        cout << "No";
 
    return 0;
}

Java

// Java program to check if a given mobile
// number is fancy or not.
import java.util.*;
import java.lang.*;
import java.io.*;
 
class GFG {
     
public static void main(String[] args) {
         
        String mobileNumber = "7654449244";
         
        if (isFancy(mobileNumber))
            System.out.println("Yes");
        else
            System.out.println("No");
    }
 
    public static boolean isFancy(String mobileNumber) {
        int incrementCount = 0;
        int decrementCount = 0;
        int consecutiveCount = 1;
        int[] countArray = new int[10];
        int prevDigit = -1;
        for(int i = 0; i < mobileNumber.length(); i++) {
         
            int digit = Integer.parseInt(String.valueOf(mobileNumber.charAt(i)));
            countArray[digit] += 1;
            // Checking for Number of occurrences of any digit is greater than 3
         
            if(countArray[digit] > 3)
                return true;
            // Checking for consecutive digits are same
         
            if(prevDigit == digit)
                consecutiveCount += 1;
         
            else if(prevDigit == digit+1 && prevDigit != -1) {
                incrementCount += 1;
                decrementCount = 0;
                consecutiveCount = 1;
            }
         
            else if(digit == prevDigit+1) {
                decrementCount += 1;
                incrementCount = 0;
                consecutiveCount = 1;
            }
         
            if(consecutiveCount == 3)
                return true;
         
            if(incrementCount == 2 || decrementCount == 2)
                return true;
         
            prevDigit = digit;
        }
        return false;
    }
}
 
// This code is contributed by Vasishta Balla

Python 3

# Python3 program to check if a
# given mobile number is fancy or not.
 
# Returns true if s has three
# consecutive same digits.
def cond1(s):
 
    for i in range(len(s) - 2):
        if (s[i] == s[i + 1] and
            s[i + 1] == s[i + 2]):
            return True
     
    return False
 
# Returns true if s has three
# increasing or decreasing digits.
def cond2(s):
    for i in range(len(s) - 2):
        if ((s[i] < s[i + 1] and
             s[i + 1] < s[i + 2]) or
            (s[i] > s[i + 1] and
             s[i + 1] > s[i + 2])):
            return True
     
    return False
 
# Checks if a single digit
# occurs 4 times.
def cond3(s):
    a = [0] * 10
    for i in range(len(s)):
        a[s[i] - '0'] = a[s[i] - '0'] + 1
     
    for i in range(len(9)):
     
        if (a[i] >= 4):
            return True
     
    return False
 
def isFancy(s):
    if (cond1(s) or cond2(s) or cond3(s)):
        return True
    else:
        return False
 
# Driver condition
s = "7609438921"
if (isFancy(s)):
    print("Yes")
else:
    print("No")
     
# This code is contributed by ash264

C#

// C# program to check if a given mobile
// number is fancy or not.
using System;
 
class GFG
{
 
    public static void Main(String[] args)
    {
 
        String mobileNumber = "7654449244";
 
        if (isFancy(mobileNumber))
        {
            Console.WriteLine("Yes");
        }
        else
        {
            Console.WriteLine("No");
        }
    }
 
    public static bool isFancy(String mobileNumber)
    {
        int incrementCount = 0;
        int decrementCount = 0;
        int consecutiveCount = 1;
        int[] countArray = new int[10];
        int prevDigit = -1;
        for (int i = 0; i < mobileNumber.Length; i++)
        {
 
            int digit = Int32.Parse(String.Join("",mobileNumber[i]));
            countArray[digit] += 1;
             
            // Checking for Number of occurrences
            // of any digit is greater than 3
            if (countArray[digit] > 3)
            {
                return true;
            }
 
            // Checking for consecutive digits are same
            if (prevDigit == digit)
            {
                consecutiveCount += 1;
            }
            else if (prevDigit == digit + 1 && prevDigit != -1)
            {
                incrementCount += 1;
                decrementCount = 0;
                consecutiveCount = 1;
            }
            else if (digit == prevDigit + 1)
            {
                decrementCount += 1;
                incrementCount = 0;
                consecutiveCount = 1;
            }
            if (consecutiveCount == 3)
            {
                return true;
            }
            if (incrementCount == 2 || decrementCount == 2)
            {
                return true;
            }
            prevDigit = digit;
        }
        return false;
    }
}
 
// This code is contributed by Rajput-Ji

Javascript

<script>
// Javascript  program to check if a given mobile
// number is fancy or not
 
// Returns true if s has three consecutive
// same digits.
function cond1( s)
{
    for (var i = 0; i < s.length - 2; i++) {
        if (s[i] == s[i + 1] && s[i + 1] == s[i + 2])
            return true;
    }
    return false;
}
 
// Returns true if s has three increasing or
// decreasing digits.
function cond2( s)
{
    for (var i = 0; i < s.length - 2; i++) {
        if ((s[i] < s[i + 1] && s[i + 1] < s[i + 2]) ||
            (s[i] > s[i + 1] && s[i + 1] > s[i + 2]))
            return true;
    }
    return false;
}
 
// Checks if a single digit occurs 4 times.
function cond3( s)
{
    var a = new Array(10);
    a.fill(0);
 
    for (var i = 0; i < s.length; i++)
        a[s[i] - '0']++;
    
    for (var i = 0; i < 9; i++)
        if (a[i] >= 4)
            return true;
     
    return false;
}
 
function isFancy( s)
{
    if (cond1(s) || cond2(s) || cond3(s))
        return true;
    else
        return false;
}
 
 var  n = "7609438921";
  
    // var s = to_string(n);
    if (isFancy(n))
        document.write( "Yes");
    else
       document.write( "No");
 
// This code is contributed by SoumikMondal
</script>
Producción: 

Yes

 

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 *