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.
- Encuentra el primer número par menor o igual que el número impar en el último índice.
- Si lo encuentra, intercambie ambos valores. De lo contrario, intercambie con el último valor par de la string.
- 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