Haz alfabetos usando los elementos de una array

Dada una array de enteros positivos, encuentre todos los alfabetos que podamos hacer usando elementos de la array. 

Ejemplos: 

Input : arr[] = {6, 5}
Output : A
In this example, we can take 6 and 5
as 65 that gives us A.

Input : arr[] = {5, 6, 6}
Output : A B
Here we can take 6 and 5 as 65 to make A. 
And 6 and 6 as 66 to make B.

Input : arr[] = {1, 0, 1, 0}
Output: d e n
Here we can take 1, 0 and 0 as 100 to make d.
1, 0 and 1 as 101 to make e. And 
1, 1, and 0 as 110 to make n.

Enfoque: el enfoque consiste en iterar un bucle desde el carácter A hasta la Z y verificar si ambos dígitos de sus valores ASCII (el valor ASCII de A es 65 y los dígitos del valor ASCII para A son 6 y 5) existen en la array o no. Para esto, tenemos que calcular la frecuencia de cada elemento de la array. Igual que para los alfabetos pequeños.

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

C++

// CPP program to find all the capital characters
// we can make from the given array.
#include <bits/stdc++.h>
using namespace std;
 
// Function returns all the capital characters
//  we can make.
string findCharacters(int arr[], int n)
{
    string ans = "";
    int brr[10] = { 0 };
 
    // Calculating the frequency of the elements.
    for (int i = 0; i < n; i++)
        brr[arr[i]]++;
 
    // Checking for capital alphabets.
    for (char ch = 'A'; ch <= 'Z'; ch++)
    {
 
        // Storing one digit in x and other in y.
        int x = ch / 10;
        int y = ch % 10;
        brr[x]--;
        brr[y]--;
 
        // If both the digits exist.
        if (brr[x] >= 0 && brr[y] >= 0)
        {
 
            // Putting in the result
            ans += ch;
            ans += ' ';
        }
        brr[x]++;
        brr[y]++;
    }
 
    // Checking for alphabets a, b and c.
    for (char ch = 'a'; ch <= 'c'; ch++)
    {
        int x = ch / 10;
        int y = ch % 10;
        brr[x]--;
        brr[y]--;
 
        // If all the digits exist.
        if (brr[x] >= 0 && brr[y] >= 0)
        {
 
            // Putting in the result
            ans += ch;
            ans += ' ';
        }
        brr[x]++;
        brr[y]++;
    }
 
    // Checking for d to z.
    for (char ch = 'd'; ch <= 'z'; ch++)
    {
        int x = (ch / 10) / 10;
        int y = (ch / 10) % 10;
        int z = ch % 10;
        brr[x]--;
        brr[y]--;
        brr[z]--;
 
        // If all the digits exist.
        if (brr[x] >= 0 && brr[y] >= 0 && brr[z] >= 0)
        {
 
            // Putting in the result
            ans += ch;
            ans += ' ';
        }
        brr[x]++;
        brr[y]++;
        brr[z]++;
    }
 
    return ans;
}
 
// Driver function
int main()
{
    int arr[] = { 5, 6, 6 }, n;
    n = sizeof(arr) / sizeof(arr[0]);
    cout << findCharacters(arr, n) << endl;
}

Java

// Java program to find all the capital characters
// we can make from the given array.
import java.util.*;
import java.lang.*;
 
public class GeeksforGeeks
{
 
    // Function returns all the capital characters we can make.
    public static String findCharacters(int arr[], int n)
    {
        String ans = "";
        int[] brr = new int[10];
 
        // Calculating the frequency of the elements.
        for (int i = 0; i < n; i++)
            brr[arr[i]]++;
 
        for (char ch = 'A'; ch <= 'Z'; ch++)
        {
 
            // Storing one digit in x and other in y.
            int x = ch / 10;
            int y = ch % 10;
            brr[x]--;
            brr[y]--;
 
            // If both the digits exist.
            if (brr[x] >= 0 && brr[y] >= 0)
            {
 
                // Putting in the result
                ans += ch;
                ans += ' ';
            }
            brr[x]++;
            brr[y]++;
        }
 
        // Checking for alphabets a, b and c.
        for (char ch = 'a'; ch <= 'c'; ch++)
        {
            int x = ch / 10;
            int y = ch % 10;
            brr[x]--;
            brr[y]--;
 
            // If all the digits exist.
            if (brr[x] >= 0 && brr[y] >= 0)
            {
 
                // Putting in the result
                ans += ch;
                ans += ' ';
            }
            brr[x]++;
            brr[y]++;
        }
 
        // Checking for d to z.
        for (char ch = 'd'; ch <= 'z'; ch++)
        {
            int x = (ch / 10) / 10;
            int y = (ch / 10) % 10;
            int z = ch % 10;
            brr[x]--;
            brr[y]--;
            brr[z]--;
 
            // If all the digits exist.
            if (brr[x] >= 0 && brr[y] >= 0 && brr[z] >= 0)
            {
 
                // Putting in the result
                ans += ch;
                ans += ' ';
            }
            brr[x]++;
            brr[y]++;
            brr[z]++;
        }
 
        return ans;
    }
 
    // Driver function
    public static void main(String argc[])
    {
        int arr[] = { 5, 6, 6 }, n;
        n = 3;
        System.out.println(findCharacters(arr, n));
    }
}

Python

# Python3 program to find all the capital characters
# we can make from the given array.
 
# Function returns all the capital characters
# we can make.
def findCharacters(arr, n):
    ans = ""
    brr = [0] * 10
 
    # Calculating the frequency of the elements.
    for i in range(n):
        brr[arr[i]] += 1
 
    # Checking for capital alphabets.
    for ch in range(ord('A'), ord('Z') + 1):
 
        # Storing one digit in x and other in y.
        x = ch // 10
        y = ch % 10
        brr[x] -= 1
        brr[y] -= 1
 
        # If both the digits exist.
        if (brr[x] >= 0 and brr[y] >= 0):
 
            # Putting in the result
            ans += chr(ch)
            ans += ' '
        brr[x] += 1
        brr[y] += 1
 
    # Checking for alphabets a, b and c.
    for ch in range(ord('a'), ord('c') + 1):
        x = ch // 10
        y = ch % 10
        brr[x] -= 1
        brr[y] -= 1
 
        # If all the digits exist.
        if (brr[x] >= 0 and brr[y] >= 0):
 
            # Putting in the result
            ans += chr(ch)
            ans += ' '
        brr[x] += 1
        brr[y] += 1
 
    # Checking for d to z.
    for ch in range(ord('d'), ord('z') + 1):
        x = (ch // 10) // 10
        y = (ch // 10) % 10
        z = ch % 10
        brr[x] -= 1
        brr[y] -= 1
        brr[z] -= 1
 
        # If all the digits exist.
        if (brr[x] >= 0 and brr[y] >= 0 and brr[z] >= 0):
 
            # Putting in the result
            ans += chr(ch)
            ans += ' '
        brr[x] += 1
        brr[y] += 1
        brr[z] += 1
 
    return ans
 
# Driver function
arr = [5, 6, 6]
n = len(arr)
print(findCharacters(arr, n))
 
# This code is contributed by mohit kumar 29

C#

// C# program to find all the capital
// characters we can make from the given array.
using System;
 
class GeeksforGeeks
{
    // Function returns all the capital
    // characters we can make.
    public static String findCharacters(int []arr, int n )
    {
        String ans = "";
        int []brr = new int[10];
 
        // Calculating the frequency of the elements.
        for (int i = 0; i < n; i++)
            brr[arr[i]]++;
 
        for (char ch = 'A'; ch <= 'Z'; ch++)
        {
            // Storing one digit in x and other in y.
            int x = ch / 10;
            int y = ch % 10;
            brr[x]--;
            brr[y]--;
 
            // If both the digits exist.
            if (brr[x] >= 0 && brr[y] >= 0)
            {
                // Putting in the result
                ans += ch;
                ans += ' ';
            }
            brr[x]++;
            brr[y]++;
        }
 
        // Checking for alphabets a, b and c.
        for (char ch = 'a'; ch <= 'c'; ch++)
        {
            int x = ch / 10;
            int y = ch % 10;
            brr[x]--;
            brr[y]--;
 
            // If all the digits exist.
            if (brr[x] >= 0 && brr[y] >= 0)
            {
 
                // Putting in the result
                ans += ch;
                ans += ' ';
            }
            brr[x]++;
            brr[y]++;
        }
 
        // Checking for d to z.
        for (char ch = 'd'; ch <= 'z'; ch++)
        {
            int x = (ch / 10) / 10;
            int y = (ch / 10) % 10;
            int z = ch % 10;
            brr[x]--;
            brr[y]--;
            brr[z]--;
 
            // If all the digits exist.
            if (brr[x] >= 0 && brr[y] >= 0 && brr[z] >= 0)
            {
                // Putting in the result
                ans += ch;
                ans += ' ';
            }
            brr[x]++;
            brr[y]++;
            brr[z]++;
        }
 
        return ans;
    }
 
    // Driver function
    public static void Main()
    {
        int []arr = {5, 6, 6};
        int n = 3;
        Console.Write(findCharacters(arr, n));
    }
}
 
// This code is contributed by nitin mittal.

Javascript

<script>
 
// JavaScript program to find
// all the capital characters
// we can make from the given array.
     
    // Function returns all the capital
    // characters we can make.
    function findCharacters(arr,n)
    {
        let ans = "";
        let brr = new Array(10);
        for(let i=0;i<brr.length;i++)
        {
            brr[i]=0;
        }
   
        // Calculating the frequency of the elements.
        for (let i = 0; i < n; i++)
            brr[arr[i]]++;
   
        for (let ch = 'A'.charCodeAt(0);
        ch <= 'Z'.charCodeAt(0); ch++)
        {
   
            // Storing one digit in x and other in y.
            let x = Math.floor(ch / 10);
            let y = ch % 10;
            brr[x]--;
            brr[y]--;
   
            // If both the digits exist.
            if (brr[x] >= 0 && brr[y] >= 0)
            {
   
                // Putting in the result
                ans += String.fromCharCode(ch);
                ans += ' ';
            }
            brr[x]++;
            brr[y]++;
        }
   
        // Checking for alphabets a, b and c.
        for (let ch = 'a'.charCodeAt(0);
        ch <= 'c'.charCodeAt(0); ch++)
        {
            let x = Math.floor(ch / 10);
            let y = ch % 10;
            brr[x]--;
            brr[y]--;
   
            // If all the digits exist.
            if (brr[x] >= 0 && brr[y] >= 0)
            {
   
                // Putting in the result
                ans += String.fromCharCode(ch);
                ans += ' ';
            }
            brr[x]++;
            brr[y]++;
        }
   
        // Checking for d to z.
        for (let ch = 'd'.charCodeAt(0);
        ch <= 'z'.charCodeAt(0); ch++)
        {
            let x = Math.floor((ch / 10) / 10);
            let y = (ch / 10) % 10;
            let z = ch % 10;
            brr[x]--;
            brr[y]--;
            brr[z]--;
   
            // If all the digits exist.
            if (brr[x] >= 0 && brr[y] >= 0 &&
            brr[z] >= 0)
            {
   
                // Putting in the result
                ans += String.fromCharCode(ch);
                ans += ' ';
            }
            brr[x]++;
            brr[y]++;
            brr[z]++;
        }
   
        return ans;
    }
     
    // Driver function
    let arr=[5, 6, 6 ];
    let n = 3;
    document.write(findCharacters(arr, n));
     
 
// This code is contributed by patel2127
 
</script>
Producción

A B 

Complejidad de tiempo: O(n)

Publicación traducida automáticamente

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