Número mayor más cercano intercambiando los dígitos

Dados dos enteros A y B . La tarea es encontrar el valor mayor más cercano a B intercambiando los dígitos de A. Si no es posible tal permutación, imprima -1.
Ejemplos: 
 

Entrada: A = 459, B = 500 
Salida: 549 
549 es el mayor más cercano. 
Entrada: A = 321, B = 567 
Salida: -1
Entrada: A = 231, B = 125 
Salida: 132 
 

Prerrequisitos: Todas las permutaciones de una string
Enfoque: 
 

  • Establezca el valor mínimo de min1 usando Integer.MAX_VALUE
  • Intercambie el dígito de A utilizando el método de permutación mencionado anteriormente.
  • Compruebe si la permutación de A es menor que min1 o no. Si es menor, actualice min1 como A.
  • Repita esto para todas las permutaciones de A y encuentre el valor mínimo mayor

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

C++

// C++ program to find nearest greater value
#include <bits/stdc++.h>
using namespace std;
 
int min1 = INT_MAX;
int _count = 0;
 
// Find all the possible permutation of Value A.
int permutation(string str1, int i, int n, int p)
{
    if (i == n)
    {
        // Convert into Integer
        int q = stoi(str1);
 
        // Find the minimum value of A by interchanging
        // the digit of A and store min1.
        if (q - p > 0 && q < min1)
        {
            min1 = q;
            _count = 1;
        }
    }
    else
    {
        for (int j = i; j <= n; j++)
        {
            // Swap two string character
            swap(str1[i], str1[j]);
            permutation(str1, i + 1, n, p);
            swap(str1[i], str1[j]);
        }
    }
    return min1;
}
 
// Driver code
int main()
{
    int A = 213;
    int B = 111;
 
    // Convert integer value into string to
    // find all the permutation of the number
    string str1 = to_string(A);
    int len = str1.length();
    int h = permutation(str1, 0, len - 1, B);
 
    // count=1 means number greater than B exists
    _count ? cout << h << endl : cout << -1 << endl;
 
    return 0;
}
 
// This code is contributed by
// sanjeev2552

Java

// JAVA program to find nearest greater value
import java.io.*;
import java.util.*;
 
class GFG {
    static int min1 = Integer.MAX_VALUE;
    static int count = 0;
 
    // Find all the possible permutation of Value A.
    public int permutation(String str1, int i, int n, int p)
    {
 
        if (i == n) {
 
            // Convert into Integer
            int q = Integer.parseInt(str1);
 
            // Find the minimum value of A by interchanging
            // the digit of A and store min1.
            if (q - p > 0 && q < min1) {
                min1 = q;
                count = 1;
            }
        }
 
        else {
            for (int j = i; j <= n; j++) {
                str1 = swap(str1, i, j);
                permutation(str1, i + 1, n, p);
                str1 = swap(str1, i, j);
            }
        }
        return min1;
    }
 
    // Swap two string character
    public String swap(String str, int i, int j)
    {
        char ch[] = str.toCharArray();
        char temp = ch[i];
        ch[i] = ch[j];
        ch[j] = temp;
        // Return the string after
        // swapping between two character.
        return String.valueOf(ch);
    }
 
    // Driver code
    public static void main(String[] args)
    {
 
        int A = 213;
        int B = 111;
 
        GFG gfg = new GFG();
 
        // Convert integer value into string to
        // find all the permutation of the number
        String str1 = Integer.toString(A);
        int len = str1.length();
        int h = gfg.permutation(str1, 0, len - 1, B);
 
        // count=1 means number greater than B exists
        if (count == 1)
            System.out.println(h);
        else
            System.out.println(-1);
    }
}

Python3

# Python3 program to find nearest greater value
min1 = 10**9
_count = 0
 
# Find all the possible permutation of Value A.
def permutation(str1, i, n, p):
    global min1, _count
    if (i == n):
         
        # Convert into Integer
        str1 = "".join(str1)
        q = int(str1)
 
        # Find the minimum value of A
        # by interchanging the digits
        # of A and store min1.
        if (q - p > 0 and q < min1):
            min1 = q
            _count = 1
    else:
        for j in range(i, n + 1):
             
            # Swap two character)
            str1[i], str1[j] = str1[j], str1[i]
            permutation(str1, i + 1, n, p)
            str1[i], str1[j] = str1[j], str1[i]
 
    return min1
 
# Driver code
A = 213
B = 111
 
# Convert integer value into to
# find all the permutation of the number
str2 = str(A)
str1 = [i for i in str2]
le = len(str1)
 
h = permutation(str1, 0, le - 1, B)
 
# count=1 means number greater than B exists
if _count == 1:
    print(h)
else:
    print(-1)
 
# This code is contributed by
# mohit

C#

// C# program to find nearest greater value
using System;
     
class GFG
{
    static int min1 = int.MaxValue;
    static int count = 0;
 
    // Find all the possible permutation of Value A.
    public int permutation(String str1, int i,
                                 int n, int p)
    {
        if (i == n)
        {
 
            // Convert into Integer
            int q = int.Parse(str1);
 
            // Find the minimum value of A by interchanging
            // the digit of A and store min1.
            if (q - p > 0 && q < min1)
            {
                min1 = q;
                count = 1;
            }
        }
 
        else
        {
            for (int j = i; j <= n; j++)
            {
                str1 = swap(str1, i, j);
                permutation(str1, i + 1, n, p);
                str1 = swap(str1, i, j);
            }
        }
        return min1;
    }
 
    // Swap two string character
    public String swap(String str, int i, int j)
    {
        char []ch = str.ToCharArray();
        char temp = ch[i];
        ch[i] = ch[j];
        ch[j] = temp;
         
        // Return the string after
        // swapping between two character.
        return String.Join("", ch);
    }
 
    // Driver code
    public static void Main(String[] args)
    {
        int A = 213;
        int B = 111;
 
        GFG gfg = new GFG();
 
        // Convert integer value into string to
        // find all the permutation of the number
        String str1 = A.ToString();
        int len = str1.Length;
        int h = gfg.permutation(str1, 0, len - 1, B);
 
        // count=1 means number greater than B exists
        if (count == 1)
            Console.WriteLine(h);
        else
            Console.WriteLine(-1);
    }
}
 
// This code is contributed by PrinciRaj1992

Javascript

<script>
// JAVAscript program to find nearest greater value
 
let min1 = Number.MAX_VALUE;
let count = 0;
 
// Find all the possible permutation of Value A.
function permutation(str1,i,n,p)
{
    if (i == n) {
   
            // Convert into Integer
            let q = parseInt(str1);
   
            // Find the minimum value of A by interchanging
            // the digit of A and store min1.
            if (q - p > 0 && q < min1) {
                min1 = q;
                count = 1;
            }
        }
   
        else {
            for (let j = i; j <= n; j++) {
                str1 = swap(str1, i, j);
                permutation(str1, i + 1, n, p);
                str1 = swap(str1, i, j);
            }
        }
        return min1;
}
 
 // Swap two string character
function swap(str,i,j)
{
    let ch = str.split("");
        let temp = ch[i];
        ch[i] = ch[j];
        ch[j] = temp;
        // Return the string after
        // swapping between two character.
        return (ch).join("");
}
 
// Driver code
let A = 213;
        let B = 111;
   
   
        // Convert integer value into string to
        // find all the permutation of the number
        let str1 = A.toString();
        let len = str1.length;
        let h = permutation(str1, 0, len - 1, B);
   
        // count=1 means number greater than B exists
        if (count == 1)
            document.write(h);
        else
            document.write(-1);
 
 
 
// This code is contributed by unknown2108
</script>
Producción: 

123

 

Publicación traducida automáticamente

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