Skip to content
Related Articles

Related Articles

Improve Article

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

  • Difficulty Level : Easy
  • Last Updated : 28 Apr, 2021

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
Swap 2 and 5.

Input :  536425
Output :  536524
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.

 

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)
This article is contributed by Sahil Chhabra. If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.
Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.
 

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with experts, please refer DSA Live Classes for Working Professionals and Competitive Programming Live for Students.




My Personal Notes arrow_drop_up
Recommended Articles
Page :