Skip to content
Related Articles
Open in App
Not now

Related Articles

Largest even number possible by using one swap operation in given number

Improve Article
Save Article
  • Difficulty Level : Easy
  • Last Updated : 03 Oct, 2022
Improve Article
Save Article

Given an odd number in the form of a string, the task is to make the largest even number from the given number, and you are allowed to do only one swap operation.

Examples : 

Input: 1235785
Output: 1535782
Explanation: Swap 2 and 5.

Input: 536425
Output:  536524
Explanation: Swap 4 and 5 to make the largest even number.

  1. Find the first even number less than or equal to the odd number at the last index.
  2. If found, swap both values. Else swap with the last even value in the string.
  3. If not possible to make even, print the given string.

Implementation:

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>

Output

1356524

Time Complexity: O(N)
Auxiliary Space: O(1)

This article is contributed by Sahil Chhabra. If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks. 


My Personal Notes arrow_drop_up
Related Articles

Start Your Coding Journey Now!