Encuentre un anagrama de un número A que genere una suma C cuando se suma a A

Dados dos números enteros positivos A y C , la tarea es verificar si existe un número B tal que A + B = C y B es un anagrama de A. Si se encuentra que es cierto, escriba «SÍ» . De lo contrario, escriba “NO” .

Entrada: A = 123, C = 354 
Salida: SI 
Explicación: 
231 es un anagrama de A y 123 + 231 = 354 
Por lo tanto, la salida requerida es “SI”.

Entrada: A = 123, C = 234
Salida: NO

Enfoque ingenuo: el enfoque más simple para resolver el problema es generar todas las permutaciones posibles de dígitos de A y verificar si la suma de A y la permutación actual de dígitos de A es igual a C o no. Si se encuentra que es cierto, escriba «SÍ» . De lo contrario, si no se encuentra tal permutación, imprima «NO»

Complejidad de tiempo: O(log 10 (N)!)  
Espacio auxiliar: O(1)

Enfoque eficiente: el enfoque anterior se puede optimizar en función de las siguientes observaciones:

UN + B = C 
B = C – UN 

Siga los pasos a continuación para resolver el problema:

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

C++

// C++ program to implement
// the above approach
 
#include <bits/stdc++.h>
using namespace std;
 
// Function to check if an integer B exists
// such that A + B = C and B is an anagram of A
void CheckExistsABCAnagramOfA(int A, int C)
{
 
    int B = C - A;
 
    // Stores A in string format
    string a = to_string(A);
 
    // Stores B in string format
    string b = to_string(B);
 
    // Sort both the strings
    sort(a.begin(), a.end());
    sort(b.begin(), b.end());
 
    // Checks if both strings
    // are equal
    if (a == b) {
        cout << "YES\n";
    }
    else {
        cout << "NO\n";
    }
}
 
// Drivers Code
int main()
{
    int A = 123, C = 354;
    CheckExistsABCAnagramOfA(A, C);
}

Java

// Java program to implement
// the above approach
import java.util.*;
class GFG
{
 
// Function to check if an integer B exists
// such that A + B = C and B is an anagram of A
static void CheckExistsABCAnagramOfA(int A, int C)
{
    int B = C - A;
 
    // Stores A in String format
    String a = String.valueOf(A);
 
    // Stores B in String format
    String b = String.valueOf(B);
 
    // Sort both the Strings
    a = sortString(a);
    b = sortString(b);
 
    // Checks if both Strings
    // are equal
    if (a.equals(b))
    {
        System.out.print("YES\n");
    }
    else
    {
        System.out.print("NO\n");
    }
}
static String sortString(String inputString)
{
   
    // convert input string to char array
    char tempArray[] = inputString.toCharArray();
       
    // sort tempArray
    Arrays.sort(tempArray);
       
    // return new sorted string
    return new String(tempArray);
}
   
// Drivers Code
public static void main(String[] args)
{
    int A = 123, C = 354;
    CheckExistsABCAnagramOfA(A, C);
}
}
 
// This code is contributed by shikhasingrajput

Python3

# Python3 program to implement the above
# approach
 
# Function to check if an integer B exists
# such that A + B = C and B is an anagram of A
def CheckExistsABCAnagramOfA(A, C):
     
    B = C - A
 
    # To convert number to list of integers
    a = [int(x) for x in str(A)]
 
    # To convert number to list of integers
    b = [int(x) for x in str(B)]
 
    # Sort both the strings
    a.sort()
    b.sort()
 
    # Checks if both strings
    # are equal
    if (a == b):
        print("YES")
    else:
        print("NO")
     
# Driver Code
A = 123
C = 354
 
CheckExistsABCAnagramOfA(A, C)
 
# This code is contributed by sanjoy_62

C#

// C# program to implement
// the above approach
using System;
 
class GFG{
     
// Function to check if an integer B
// exists such that A + B = C and B
// is an anagram of A
static void CheckExistsABCAnagramOfA(int A, int C)
{
    int B = C - A;
     
    // Stores A in String format
    String a = String.Join("", A);
     
    // Stores B in String format
    String b = String.Join("", B);
     
    // Sort both the Strings
    a = sortString(a);
    b = sortString(b);
 
    // Checks if both Strings
    // are equal
    if (a.Equals(b))
    {
        Console.Write("YES\n");
    }
    else
    {
        Console.Write("NO\n");
    }
}
 
static String sortString(String inputString)
{
     
    // Convert input string to char array
    char []tempArray = inputString.ToCharArray();
     
    // Sort tempArray
    Array.Sort(tempArray);
     
    // Return new sorted string
    return new String(tempArray);
}
 
// Driver Code
public static void Main(String[] args)
{
    int A = 123, C = 354;
     
    CheckExistsABCAnagramOfA(A, C);
}
}
 
// This code is contributed by shikhasingrajput

Javascript

<script>
 
// JavaScript program to implement
// the above approach
 
// Function to check if an integer B exists
// such that A + B = C and B is an anagram of A
function CheckExistsABCAnagramOfA(A, C)
{
 
    var B = C - A;
 
    // Stores A in string format
    var a = (A.toString());
 
    // Stores B in string format
    var b = (B.toString());
 
    // Sort both the strings
    a = a.split('').sort().join('');
    b = b.split('').sort().join('');
 
    // Checks if both strings
    // are equal
    if (a == b) {
        document.write( "YES");
    }
    else {
        document.write( "NO");
    }
}
 
// Drivers Code
var A = 123, C = 354;
CheckExistsABCAnagramOfA(A, C);
 
</script>
Producción: 

YES

 

Complejidad de tiempo: O(log 10 (A)*log(log 10 (A)))
Espacio auxiliar: O(log 10 (A))

Publicación traducida automáticamente

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