Largest even number possible by using one swap operation in given number
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.
- Find the first even number less than or equal to the odd number at the last index.
- If found, swap both values. Else swap with the last even value in the string.
- 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.
Please Login to comment...