Diferencia entre la suma de números cuya frecuencia de todos los dígitos son iguales y diferentes

Dada una array de N enteros, encuentre la diferencia entre la suma de números cuya frecuencia de todos los dígitos es igual y diferente. Por ejemplo, 8844, 1001, 56, 77, 34764673 son ejemplos de números donde todos los dígitos tienen la misma frecuencia. Del mismo modo, 545, 44199, 76672, 202 son ejemplos de números cuya frecuencia de dígitos no es la misma. 
Ejemplos: 
 

Entrada: a[] = {24, 787, 2442, 101, 1212} 
Salida: 2790 
(2442 + 24 + 1212) – (787 + 101) = 2790
Entrada: a[]= {12321, 786786, 110022, 47, 22895} 
Salida: 861639 
 

Enfoque: poligonal para cada elemento de la array. Mantenga un conteo de todos los dígitos en un mapa. Una vez que se recorren todos los dígitos en el elemento, verifique si el mapa contiene la misma frecuencia para todos los dígitos. Si contiene la misma frecuencia, agréguela a la misma; de lo contrario, agréguela a la diferencia. Después de que la array se haya recorrido por completo, devuelva la diferencia de ambos elementos. 
A continuación se muestra la implementación del enfoque anterior: 
 

CPP

// C++ Difference between the
// summation of numbers
// in which the frequency of
// all digits are same and different
#include <bits/stdc++.h>
using namespace std;
 
// Function that returns the difference
int difference(int a[], int n)
{
 
    // Stores the sum of same
    // and different frequency digits
    int same = 0;
    int diff = 0;
 
    // traverse in the array
    for (int i = 0; i < n; i++) {
        // duplicate of array element
        int num = a[i];
        unordered_map<int, int> mp;
 
        // traverse for every digit
        while (num) {
            mp[num % 10]++;
            num = num / 10;
        }
 
        // iterator pointing to the
        // first element in the array
        auto it = mp.begin();
 
        // count of the smallest digit
        int freqdigit = (*it).second;
        int flag = 0;
 
        // check if all digits have same frequency or not
        for (auto it = mp.begin(); it != mp.end(); it++) {
            if ((*it).second != freqdigit) {
                flag = 1;
                break;
            }
        }
 
        // add to diff if not same
        if (flag)
            diff += a[i];
        else
            same += a[i];
    }
 
    return same - diff;
}
 
// Driver Code
int main()
{
    int a[] = { 24, 787, 2442, 101, 1212 };
    int n = sizeof(a) / sizeof(a[0]);
    cout << difference(a, n);
    return 0;
}

Java

// Java Difference between the
// summation of numbers
// in which the frequency of
// all digits are same and different
import java.util.*;
 
class GFG
{
 
// Function that returns the difference
static int difference(int a[], int n)
{
 
    // Stores the sum of same
    // and different frequency digits
    int same = 0;
    int diff = 0;
 
    // traverse in the array
    for (int i = 0; i < n; i++)
    {
         
        // duplicate of array element
        int num = a[i];
        HashMap<Integer,Integer> mp = new HashMap<Integer,Integer>();
 
        // traverse for every digit
        while (num > 0)
        {
            if(mp.containsKey(num % 10))
                mp.put(num % 10, (mp.get(num % 10) + 1));
            else
                mp.put(num % 10, 1);
            num = num / 10;
        }
 
        // iterator pointing to the
        // first element in the array
        Iterator<Map.Entry<Integer, Integer>> it = mp.entrySet().iterator();
         
        // count of the smallest digit
        int freqdigit = it.next().getValue();
        int flag = 0;
 
        // check if all digits have same frequency or not
        for (Map.Entry<Integer,Integer> its : mp.entrySet())
        {
            if (its.getValue() != freqdigit)
            {
                flag = 1;
                break;
            }
        }
 
        // add to diff if not same
        if (flag == 1)
            diff += a[i];
        else
            same += a[i];
    }
 
    return same - diff;
}
 
// Driver Code
public static void main(String[] args)
{
    int a[] = { 24, 787, 2442, 101, 1212 };
    int n = a.length;
    System.out.print(difference(a, n));
}
}
 
// This code is contributed by PrinciRaj1992

Python3

# Python3 Difference between the
# summation of numbers
# in which the frequency of
# all digits are same and different
 
# Function that returns the difference
def difference(a, n):
     
    # Stores the sum of same
    # and different frequency digits
    same = 0
    diff = 0
     
    # traverse in the array
    for i in range(n):
         
        # duplicate of array element
        num = a[i]
        mp={}
         
        # traverse for every digit
        while (num):
            if num % 10 not in mp:
                mp[num % 10] = 0
            mp[num % 10] += 1
            num = num // 10
             
        # iterator pointing to the
        # first element in the array
        it = list(mp.keys())
         
        # count of the smallest digit
        freqdigit = mp[it[0]]
        flag = 0
         
        # check if all digits have same frequency or not
        for it in mp:
            if mp[it] != freqdigit:
                flag = 1
                break
             
        # add to diff if not same
        if (flag):
            diff += a[i]
        else:
            same += a[i]
     
    return same - diff
 
# Driver Code
a = [24, 787, 2442, 101, 1212]
n = len(a)
print(difference(a, n))
 
# This code is contributed by SHUBHAMSINGH10
Producción: 

2790

 

Publicación traducida automáticamente

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