Número más grande con un intercambio permitido

Dado un entero positivo, encuentre el número más grande que podría generarse intercambiando solo dos dígitos como máximo una vez.
Ejemplos: 
 

Input: 2736
Output : 7236
Explanation:
If we swap the number 2 and the number
7 then the generated number would be 
the largest number.

Input : 432
Output : 432
Explanation:
Here, no swap is required. The given
number is already largest.

Enfoque 1 (Probando cada par): 
Convertimos el número en una string. Para cada dígito del número, intercambiaremos posiciones (i, j) y lo almacenaremos como verificación temporal si la temperatura es mayor que el número. En caso afirmativo, vuelva a cambiar para restaurar el número original.
 

C++

// code to find largest number with
// given conditions.
 
#include <bits/stdc++.h>
using namespace std;
 
// function to find the largest number
// with given conditions.
int largestNum(int num)
{
    // converting the number to the string
    string num_in_str = to_string(num);
    string temp = num_in_str;
 
    // swapping each digit
    for (int i = 0; i < num_in_str.size(); i++) {
        for (int j = i + 1; j < num_in_str.size(); j++) {
 
            // Swapping and checking for the larger
            swap(num_in_str[i], num_in_str[j]);
            if (stoi(num_in_str) > stoi(temp))
                temp = num_in_str;
 
            // Reverting the changes
            swap(num_in_str[i], num_in_str[j]);
        }
    }
 
    return stoi(temp);
}
 
// driver function
int main()
{
    int num = 432;
    cout << largestNum(num) << endl;
    num = 2736;
    cout << largestNum(num) << endl;
    num = 4596;
    cout << largestNum(num) << endl;
    return 0;
}

Java

// Java code to find largest number
// with given conditions.
public class LargestNumber {
 
    static String swap(String str, int i, int j)
    {
        char ch[] = str.toCharArray();
        char temp = ch[i];
        ch[i] = ch[j];
        ch[j] = temp;
        String c = String.valueOf(ch);
        return c;
    }
 
    // function to find the largest number
    // with given conditions.
    static int largestNum(int num)
    {
        // converting the number to the string
        String num_in_str = "" + num;
        String temp = num_in_str;
 
        // swapping each digit
        for (int i = 0; i < num_in_str.length(); i++) {
            for (int j = i + 1; j < num_in_str.length();
                 j++) {
 
                // Swapping and checking for the larger
                num_in_str = swap(num_in_str, i, j);
                if (temp.compareTo(num_in_str) < 0)
                    temp = num_in_str;
 
                // Reverting the changes
                num_in_str = swap(num_in_str, i, j);
            }
        }
 
        return Integer.parseInt(temp);
    }
 
    // Driver code
    public static void main(String[] s)
    {
        int num = 423;
        System.out.println(largestNum(num));
        num = 2736;
        System.out.println(largestNum(num));
        num = 4596;
        System.out.println(largestNum(num));
    }
}
 
// This code is contributed by Prerena Saini

Python3

# python3 code to find the largest
# number with given conditions.
 
# function to find the largest number
def largestNum(num):
 
    # converting the number to the list
    num_to_str = list(str(num))
    temp = num_to_str[:]
 
    # swapping each digit and check for
    # the largest number
    for i in range(len(num_to_str)):
        for j in range(i + 1, len(num_to_str)):
 
            // Swapping current pair
            num_to_str[i], num_to_str[j] = num_to_str[j], num_to_str[i]
            if num_to_str > temp:
                temp = num_to_str[:]
 
            # Reverting above change before next iteration
            num_to_str[i], num_to_str[j] = num_to_str[j], num_to_str[i]
 
    # returning the largest number.
    return int("".join(temp))
 
# main function
def main():
    A = int(432)
    print(largestNum(A))
    A = int(2736)
    print(largestNum(A))
    A = int(4596)
    print(largestNum(A))
 
# calling main function
if __name__=="__main__":
    main()

C#

// C# code to find largest number
// with given conditions.
using System;
 
public class LargestNumber {
 
    static String swap(String str, int i, int j)
    {
        char[] ch = str.ToCharArray();
        char temp = ch[i];
        ch[i] = ch[j];
        ch[j] = temp;
        String c = String.Join("", ch);
        return c;
    }
 
    // function to find the largest number
    // with given conditions.
    static int largestNum(int num)
    {
        // converting the number to the string
        String num_in_str = "" + num;
        String temp = num_in_str;
 
        // swapping each digit
        for (int i = 0; i < num_in_str.Length; i++) {
            for (int j = i + 1; j < num_in_str.Length;
                 j++) {
 
                // Swapping and checking for the larger
                num_in_str = swap(num_in_str, i, j);
                if (temp.CompareTo(num_in_str) < 0)
                    temp = num_in_str;
 
                // Reverting the changes
                num_in_str = swap(num_in_str, i, j);
            }
        }
        return Convert.ToInt32(temp);
    }
 
    // Driver code
    public static void Main(String[] s)
    {
        int num = 423;
        Console.WriteLine(largestNum(num));
        num = 2736;
        Console.WriteLine(largestNum(num));
        num = 4596;
        Console.WriteLine(largestNum(num));
    }
}
 
// This code is contributed by 29AjayKumar

Javascript

<script>
 
// JavaScript code to find largest number with
// given conditions.
 
// function to find the largest number
// with given conditions.
function largestNum(num)
{
    // converting the number to the string
    var num_in_str = (num.toString().split(''));
    var temp = JSON.parse(JSON.stringify(num_in_str));
 
    // swapping each digit
    for (var i = 0; i < num_in_str.length; i++) {
        for (var j = i + 1; j < num_in_str.length; j++)
        {
 
            // Swapping and checking for the larger
            [num_in_str[i], num_in_str[j]] =
            [num_in_str[j], num_in_str[i]];
            if (parseInt(num_in_str.join('')) >
                parseInt(temp.join('')))
                temp =
                JSON.parse(JSON.stringify(num_in_str));
 
            // Reverting the changes
            [num_in_str[i], num_in_str[j]] =
            [num_in_str[j], num_in_str[i]];
        }
    }
 
    return parseInt(temp.join(''));
}
 
// driver function
 
var num = 432;
document.write( largestNum(num) + "<br>");
num = 2736;
document.write( largestNum(num) + "<br>");
num = 4596;
document.write( largestNum(num) + "<br>");
 
</script>

Producción:  

432
7236
9546

Enfoque 2 (eficiente): 
escanearemos el número desde la dirección hacia atrás. En el escaneo, si el dígito i es el más grande con diferencia, guárdelo junto con su índice o si el dígito actual es más pequeño que el dígito más grande registrado con diferencia, este dígito y el dígito más grande son los más adecuados para el intercambio.
A continuación se muestra la implementación del enfoque anterior. 
 

C++

// code to find largest number with
// given conditions.
#include <bits/stdc++.h>
using namespace std;
 
// function to find the largest number
// with given conditions.
int largestNum(int num)
{
    int max_digit = -1;
    int max_digit_indx = -1;
    int l_indx = -1;
    int r_indx = -1;
 
    // converting the number to string
    string num_in_str = to_string(num);
    for (int i = num_in_str.size() - 1; i >= 0; i--) {
 
        // current digit is the largest by far
        if (num_in_str[i] > max_digit) {
            max_digit = num_in_str[i];
            max_digit_indx = i;
            continue;
        }
 
        // best digit for swap if there is no more
        // such situation on the left side
        if (num_in_str[i] < max_digit) {
            l_indx = i;
            r_indx = max_digit_indx;
        }
    }
 
    // check for is number already in order
    if (l_indx == -1)
        return num;
 
    swap(num_in_str[l_indx], num_in_str[r_indx]);
 
    return stoi(num_in_str);
}
 
// driver function
int main()
{
    int num = 789;
    cout << largestNum(num) << endl;
    num = 49658;
    cout << largestNum(num) << endl;
    num = 2135;
    cout << largestNum(num) << endl;
    return 0;
}

Java

// Java to find largest number with
// given conditions.
class GFG {
 
    // function to find the largest number
    // with given conditions.
    static int largestNum(int num)
    {
        int max_digit = -1;
        int max_digit_indx = -1;
        int l_indx = -1;
        int r_indx = 1;
 
        // converting the number to string
        String num_in_str = String.valueOf(num);
        for (int i = num_in_str.length() - 1; i >= 0; i--) {
            // current digit is the largest by far
            if (num_in_str.charAt(r_indx) > max_digit) {
                max_digit = num_in_str.charAt(i);
                max_digit_indx = i;
                continue;
            }
 
            // best digit for swap if there is no more
            // such situation on the left side
            if (num_in_str.charAt(i) < max_digit) {
                l_indx = i;
                r_indx = max_digit_indx;
            }
        }
 
        // check for is number already in order
        if (l_indx == -1)
            return num;
 
        num_in_str = swap(num_in_str, l_indx, r_indx);
 
        return Integer.parseInt(num_in_str);
    }
    static String swap(String arr, int i, int j)
    {
        char temp[] = arr.toCharArray();
        char c = temp[i];
        temp[i] = temp[j];
        temp[j] = c;
        return String.valueOf(temp);
    }
 
    // Driver code
    public static void main(String[] args)
    {
        int num = 789;
        System.out.println(largestNum(num));
        num = 49658;
        System.out.println(largestNum(num));
        num = 2135;
        System.out.println(largestNum(num));
    }
}
 
// This code contributed by Rajput-Ji

Python3

# Python3 to find largest number with
# given conditions.
 
# Function to find the largest number
# with given conditions.
def largestNum(num):
    max_digit = -1
    max_digit_indx = -1
    l_indx = -1
    r_indx = 1
 
    # converting the number to string
    num_in_str = list(str(num))
    for i in range(len(num_in_str) - 1, -1, -1):
         
        # current digit is the largest by far
        if int(num_in_str[i]) > int(max_digit):
            max_digit = num_in_str[i]
            max_digit_indx = i
            continue
 
        # best digit for swap if there is no more
        # such situation on the left side
        if int(num_in_str[i]) < int(max_digit):
            l_indx = i
            r_indx = max_digit_indx
 
    # check for is number already in order
    if l_indx == -1:
        return num
 
    num_in_str[l_indx], num_in_str[r_indx] = \
    num_in_str[r_indx], num_in_str[l_indx]
 
    return int(''.join(num_in_str))
 
# Driver Code
num = 789
print(largestNum(num))
num = 49658
print(largestNum(num))
num = 2135
print(largestNum(num))
 
# This code is contributed by Gowtham Yuvaraj

C#

// C# to find largest number with
// given conditions.
using System;
 
class GFG {
 
    // function to find the largest number
    // with given conditions.
    static int largestNum(int num)
    {
        int max_digit = -1;
        int max_digit_indx = -1;
        int l_indx = -1;
        int r_indx = 1;
 
        // converting the number to string
        String num_in_str = String.Join("", num);
        for (int i = num_in_str.Length - 1; i >= 0; i--) {
            // current digit is the largest by far
            if (num_in_str[r_indx] > max_digit) {
                max_digit = num_in_str[i];
                max_digit_indx = i;
                continue;
            }
 
            // best digit for swap if there is no more
            // such situation on the left side
            if (num_in_str[i] < max_digit) {
                l_indx = i;
                r_indx = max_digit_indx;
            }
        }
 
        // check for is number already in order
        if (l_indx == -1)
            return num;
 
        num_in_str = swap(num_in_str, l_indx, r_indx);
 
        return int.Parse(num_in_str);
    }
    static String swap(String arr, int i, int j)
    {
        char[] temp = arr.ToCharArray();
        char c = temp[i];
        temp[i] = temp[j];
        temp[j] = c;
        return String.Join("", temp);
    }
 
    // Driver code
    public static void Main(String[] args)
    {
        int num = 789;
        Console.WriteLine(largestNum(num));
        num = 49658;
        Console.WriteLine(largestNum(num));
        num = 2135;
        Console.WriteLine(largestNum(num));
    }
}
 
/* This code contributed by PrinciRaj1992 */

Producción:  

987
94658
5132

Publicación traducida automáticamente

Artículo escrito por Abhishek Sharma 44 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 *