Ordenar números según el número de letras necesarias para representarlos en palabras

Dada una array arr[] que contiene N enteros no negativos, la tarea es ordenar estos enteros según la suma del número de letras necesarias para representarlos.

Ejemplos: 

Entrada: arr[] = {12, 10, 31, 18} 
Salida: 12 31 10 18 
Explicación: 
12 -> uno + dos -> 3 + 3 = 6 
31 -> tres + uno -> 4 + 3 = 7 
10 -> uno + cero -> 3 + 4 = 7 
18 -> uno + ocho -> 3 + 5 = 8

Entrada: arr[] = {12, 10} 
Salida: 12 10 
Explicación: 
12 -> uno + dos -> 3 + 3 = 6 
10 -> uno + cero -> 3 + 4 = 7 

Acercarse:  

  • Inicialmente, se define una array de tamaño diez que contiene el número de letras necesarias para representar cada dígito.
  • Ahora, la array dada se itera y para cada número, se encuentra la cantidad de letras requeridas para representarlos.
  • Ahora, este recuento total de caracteres y el número se suman a un par de vectores .
  • Finalmente, este par de vectores se ordena en orden ascendente.

A continuación se muestra la implementación del enfoque anterior:

C++

// C++ program to sort the strings
// based on the numbers of letters
// required to represent them
 
#include <bits/stdc++.h>
using namespace std;
 
// letters[i] stores the count of letters
// required to represent the digit i
const int letters[] = { 4, 3, 3, 3, 4,
                        4, 3, 5, 5, 4 };
 
// Function to return the sum of
// letters required to represent N
int sumOfLetters(int n)
{
    int sum = 0;
    while (n > 0) {
        sum += letters[n % 10];
        n = n / 10;
    }
    return sum;
}
 
// Function to sort the array according to
// the sum of letters to represent n
void sortArr(int arr[], int n)
{
    // Vector to store the digit sum
    // with respective elements
    vector<pair<int, int> > vp;
 
    // Inserting digit sum with elements
    // in the vector pair
    for (int i = 0; i < n; i++) {
 
        // Making the vector pair
        vp.push_back(
            make_pair(
                sumOfLetters(
                    arr[i]),
                arr[i]));
    }
 
    // Sort the vector, this will sort the
    // pair according to the sum of
    // letters to represent n
    sort(vp.begin(), vp.end());
 
    // Print the sorted vector content
    for (int i = 0; i < vp.size(); i++)
        cout << vp[i].second << " ";
}
 
// Driver code
int main()
{
    int arr[] = { 12, 10, 31, 18 };
    int n = sizeof(arr) / sizeof(arr[0]);
 
    sortArr(arr, n);
 
    return 0;
}

Java

// Java program to sort the strings
// based on the numbers of letters
// required to represent them
import java.util.*;
import java.lang.*;
 
class GFG{
     
// letters[i] stores the count of letters
// required to represent the digit i
static int letters[] = { 4, 3, 3, 3, 4,
                         4, 3, 5, 5, 4 };
                          
// Function to return the sum of
// letters required to represent N
static int sumOfLetters(int n)
{
    int sum = 0;
    while (n > 0)
    {
        sum += letters[n % 10];
        n = n / 10;
    }
    return sum;
}
 
// Function to sort the array according to
// the sum of letters to represent n
static void sortArr(int arr[], int n)
{
     
    // Vector to store the digit sum
    // with respective elements
    ArrayList<int[]> vp = new ArrayList<>();
     
    // Inserting digit sum with elements
    // in the vector pair
    for(int i = 0; i < n; i++)
    {
         
        // Making the vector pair
        vp.add(new int[]{sumOfLetters(arr[i]),
                                      arr[i]});
    }
 
    // Sort the vector, this will sort the
    // pair according to the sum of
    // letters to represent n
    Collections.sort(vp, (a, b) -> a[0] - b[0]);
     
    // Print the sorted vector content
    for(int i = 0; i < vp.size(); i++)
        System.out.print(vp.get(i)[1] + " ");
}
 
// Driver code
public static void main(String[] args)
{
    int arr[] = { 12, 10, 31, 18 };
    int n = arr.length;
     
    sortArr(arr, n);
}
}
 
// This code is contributed by offbeat

Python3

# Python3 program to sort the strings
# based on the numbers of letters
# required to represent them
 
# letters[i] stores the count of letters
# required to represent the digit i
letters = [4, 3, 3, 3, 4,
           4, 3, 5, 5, 4]
 
# Function to return the sum of
# letters required to represent N
def sumOfLetters(n):
 
    sum = 0
    while (n > 0):
        sum += letters[n % 10]
        n = n // 10
 
    return sum
 
# Function to sort the array according to
# the sum of letters to represent n
def sortArr(arr, n):
     
    # List to store the digit sum
    # with respective elements
    vp = []
 
    # Inserting digit sum with elements
    # in the list pair
    for i in range(n):
        vp.append([sumOfLetters(arr[i]), arr[i]])
 
    # Sort the list, this will sort the
    # pair according to the sum of
    # letters to represent n
    vp.sort(key = lambda x : x[0])
 
    # Print the sorted list content
    for i in vp:
        print(i[1], end = " ")
 
# Driver code
if __name__ == '__main__':
    arr = [ 12, 10, 31, 18 ]
    n = len(arr)
 
    sortArr(arr, n)
 
# This code is contributed by Shivam Singh

Javascript

<script>
 
// Javascript program to sort the strings
// based on the numbers of letters
// required to represent them
 
// letters[i] stores the count of letters
// required to represent the digit i
let letters = [ 4, 3, 3, 3, 4,
                         4, 3, 5, 5, 4 ];
                           
// Function to return the sum of
// letters required to represent N
function sumOfLetters( n)
{
    let sum = 0;
    while (n > 0)
    {
        sum += letters[n % 10];
        n = Math.floor(n / 10);
    }
    return sum;
}
  
// Function to sort the array according to
// the sum of letters to represent n
function sortArr(arr, n)
{
      
    // Vector to store the digit sum
    // with respective elements
    let vp = [];
      
    // Inserting digit sum with elements
    // in the vector pair
    for(let i = 0; i < n; i++)
    {
          
        // Making the vector pair
        vp.push([sumOfLetters(arr[i]),
                                      arr[i]]);
    }
  
    // Sort the vector, this will sort the
    // pair according to the sum of
    // letters to represent n
    vp.sort((a, b) => a[0] - b[0]);
      
    // Print the sorted vector content
    for(let i = 0; i < vp.length; i++)
        document.write(vp[i][1] + " ");
}
  
  // Driver Code
     
    let arr = [ 12, 10, 31, 18 ];
    let n = arr.length;
      
    sortArr(arr, n);
 
</script>
Producción: 

12 31 10 18

 

Complejidad de tiempo: O(N * log(N)) , donde N es el tamaño de la array.
 

Publicación traducida automáticamente

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