El mayor número par posible mediante el uso de una operación de intercambio en un número dado

Dado un número impar en forma de string, la tarea es hacer el número par más grande del número dado, y solo se le permite realizar una operación de intercambio.

Ejemplos: 

Input : 1235785
Output :1535782
Swap 2 and 5.

Input :  536425
Output :  536524
Swap 4 and 5 to make the largest even number.
  1. Encuentra el primer número par menor o igual que el número impar en el último índice.
  2. Si lo encuentra, intercambie ambos valores. De lo contrario, intercambie con el último valor par de la string.
  3. Si no es posible igualar, imprima la string dada.

Implementación:

C++

// C++ program for above implementation
#include <bits/stdc++.h>
using namespace std;
 
// Make the largest even number
string makeEven(string str)
{
    int n = str.length();
    int even = INT_MAX, index;
 
    // Start traversing the string
    for (int i = 0; i < n - 1; i++) {
 
        // Find the even number
        if ((str[i] - '0') % 2 == 0) {
            even = (str[i] - '0');
            index = i;
        }
 
        // Check if current even is equal to
        // or less than the odd number
        if (even <= (str[n - 1] - '0'))
            break;
    }
 
    // Return original string if there is no
    // even value
    if (even == INT_MAX)
        return str;
 
    // Swap even and odd value
    swap(str[index], str[n - 1]);
 
    return str;
}
 
// Driver code
int main()
{
    string str = "1356425";
    cout << makeEven(str);
    return 0;
}

Java

// Java program for above implementation
 
class GFG {
 
// Make the largest even number
    static char[] makeEven(String string) {
        char []str = string.toCharArray();
        int n = str.length;
        int even = Integer.MAX_VALUE, index = 0;
 
        // Start traversing the String
        for (int i = 0; i < n - 1; i++) {
 
            // Find the even number
            if ((str[i] - '0') % 2 == 0) {
                even = (str[i] - '0');
                index = i;
            }
 
            // Check if current even is equal to
            // or less than the odd number
            if (even <= (str[n-1] - '0')) {
                break;
            }
        }
 
        // Return original String if there is no
        // even value
        if (even == Integer.MAX_VALUE) {
            return str;
        }
 
        // Swap even and odd value
        swap(str,index, n - 1);
 
        return str;
    }
static void swap(char[] str,int index1,int index2){
    char temp = str[index1];
    str[index1] = str[index2];
    str[index2] =temp;
}
// Driver code
    public static void main(String[] args) {
        String str = "1356425";
        System.out.print(makeEven(str));
    }
}
/*This code is contributed by PrinciRaj1992*/

Python3

# Python3 code for the above implementation
import sys
 
# Make the largest even number
def makeEven(arr, n):
     
    # index to first even no,if any
    first_e_i = -1
     
    # index to last even no, if any
    last_e_i = -1
     
    # index to last no
    last_n_i = n - 1
 
    # Start traversing the String
    for i in range(n):
 
        # if it finds any first even no less
        # than last digit then break the loop
        if (int(arr[i]) % 2 == 0 and
            int(arr[i]) < int(arr[last_n_i])):
            first_e_i = i
            break
             
        # it finds last even no
        if int(arr[i]) % 2 == 0:
            last_e_i = i
    if first_e_i != -1:
         
        # swap even and odd value
        (arr[first_e_i],
         arr[last_n_i]) = (arr[last_n_i],
                           arr[first_e_i])
        return arr
    if first_e_i == -1 and last_e_i != -1:
         
        # swap even and odd value
        (arr[last_e_i],
         arr[last_n_i]) = (arr[last_n_i],
                           arr[last_e_i])
        return arr
         
    # Return original String if there is
    # no even number
    return arr    
 
# Driver Code
if __name__=='__main__':
    string="1356425"
    result = "".join(makeEven(list(string),
                          len(list(string))))
    print(result)
  
# This code is contributed
# by Vikash Kumar 37

C#

// C# implementation of above approach
using System;
 
public class GFG {
  
// Make the largest even number
    static char[] makeEven(String str1) {
        char []str = str1.ToCharArray();
        int n = str.Length;
        int even = int.MaxValue, index = 0;
  
        // Start traversing the String
        for (int i = 0; i < n - 1; i++) {
  
            // Find the even number
            if ((str[i] - '0') % 2 == 0) {
                even = (str[i] - '0');
                index = i;
            }
  
            // Check if current even is equal to
            // or less than the odd number
            if (even <= (str[n-1] - '0')) {
                break;
            }
        }
  
        // Return original String if there is no
        // even value
        if (even == int.MaxValue) {
            return str;
        }
  
        // Swap even and odd value
        swap(str,index, n - 1);
  
        return str;
    }
static void swap(char[] str,int index1,int index2){
    char temp = str[index1];
    str[index1] = str[index2];
    str[index2] =temp;
}
// Driver code
    public static void Main() {
        String str = "1356425";
        Console.WriteLine(makeEven(str));
    }
}
/*This code is contributed by PrinciRaj1992*/

PHP

<?php
// PHP program for above implementation
 
// Make the largest even number
function makeEven($str)
{
    $n = strlen($str);
    $even = PHP_INT_MAX; $index;
 
    // Start traversing the string
    for ($i = 0; $i < $n - 1; $i++)
    {
 
        // Find the even number
        if (($str[$i] - '0') % 2 == 0)
        {
            $even = ($str[$i] - '0');
            $index = $i;
        }
 
        // Check if current even is
        // equal to or less than
        // the odd number
        if ($even <= ($str[$n - 1] - '0'))
            break;
    }
 
    // Return original string if
    // there is no even value
    if ($even == PHP_INT_MAX)
        return $str;
 
    //swap the number
    list($str[$index],
         $str[$n - 1]) = array($str[$n - 1],
                               $str[$index]);
    return $str;
}
 
// Driver code
$str = "1356425";
echo makeEven($str);
 
// This code is contributed by ajit
?>

Javascript

<script>
    // Javascript program for above implementation
     
    // Make the largest even number
    function makeEven(string) {
        let str = string.split('');
        let n = str.length;
        let even = Number.MAX_VALUE, index = 0;
   
        // Start traversing the String
        for (let i = 0; i < n - 1; i++) {
   
            // Find the even number
            if ((str[i].charCodeAt() - '0'.charCodeAt()) % 2 == 0) {
                even = (str[i] - '0');
                index = i;
            }
   
            // Check if current even is equal to
            // or less than the odd number
            if (even <= (str[n-1].charCodeAt() - '0'.charCodeAt())) {
                break;
            }
        }
   
        // Return original String if there is no
        // even value
        if (even == Number.MAX_VALUE) {
            return str;
        }
   
        // Swap even and odd value
        swap(str,index, n - 1);
   
        return str.join("");
    }
     
    function swap(str, index1, index2)
    {
      let temp = str[index1];
      str[index1] = str[index2];
      str[index2] =temp;
    }
     
    let str = "1356425";
      document.write(makeEven(str));
     
</script>
Producción

1356524

Complejidad de tiempo : O(N)

Este artículo es una contribución de Sahil Chhabra . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks. 

Publicación traducida automáticamente

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