# 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 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.
```

## Recommended: Please solve it on “PRACTICE ” first, before moving on to the solution.

1. Find the first even number less than or equal to the odd number at 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 ` `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

 ` `

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.

My Personal Notes arrow_drop_up

Article Tags :
Practice Tags :

1

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.