Dado un entero positivo, encuentre el número más grande que podría generarse intercambiando solo dos dígitos como máximo una vez.
Ejemplos:
Input: 2736 Output : 7236 Explanation: If we swap the number 2 and the number 7 then the generated number would be the largest number. Input : 432 Output : 432 Explanation: Here, no swap is required. The given number is already largest.
Enfoque 1 (Probando cada par):
Convertimos el número en una string. Para cada dígito del número, intercambiaremos posiciones (i, j) y lo almacenaremos como verificación temporal si la temperatura es mayor que el número. En caso afirmativo, vuelva a cambiar para restaurar el número original.
C++
// code to find largest number with // given conditions. #include <bits/stdc++.h> using namespace std; // function to find the largest number // with given conditions. int largestNum(int num) { // converting the number to the string string num_in_str = to_string(num); string temp = num_in_str; // swapping each digit for (int i = 0; i < num_in_str.size(); i++) { for (int j = i + 1; j < num_in_str.size(); j++) { // Swapping and checking for the larger swap(num_in_str[i], num_in_str[j]); if (stoi(num_in_str) > stoi(temp)) temp = num_in_str; // Reverting the changes swap(num_in_str[i], num_in_str[j]); } } return stoi(temp); } // driver function int main() { int num = 432; cout << largestNum(num) << endl; num = 2736; cout << largestNum(num) << endl; num = 4596; cout << largestNum(num) << endl; return 0; }
Java
// Java code to find largest number // with given conditions. public class LargestNumber { static String swap(String str, int i, int j) { char ch[] = str.toCharArray(); char temp = ch[i]; ch[i] = ch[j]; ch[j] = temp; String c = String.valueOf(ch); return c; } // function to find the largest number // with given conditions. static int largestNum(int num) { // converting the number to the string String num_in_str = "" + num; String temp = num_in_str; // swapping each digit for (int i = 0; i < num_in_str.length(); i++) { for (int j = i + 1; j < num_in_str.length(); j++) { // Swapping and checking for the larger num_in_str = swap(num_in_str, i, j); if (temp.compareTo(num_in_str) < 0) temp = num_in_str; // Reverting the changes num_in_str = swap(num_in_str, i, j); } } return Integer.parseInt(temp); } // Driver code public static void main(String[] s) { int num = 423; System.out.println(largestNum(num)); num = 2736; System.out.println(largestNum(num)); num = 4596; System.out.println(largestNum(num)); } } // This code is contributed by Prerena Saini
Python3
# python3 code to find the largest # number with given conditions. # function to find the largest number def largestNum(num): # converting the number to the list num_to_str = list(str(num)) temp = num_to_str[:] # swapping each digit and check for # the largest number for i in range(len(num_to_str)): for j in range(i + 1, len(num_to_str)): // Swapping current pair num_to_str[i], num_to_str[j] = num_to_str[j], num_to_str[i] if num_to_str > temp: temp = num_to_str[:] # Reverting above change before next iteration num_to_str[i], num_to_str[j] = num_to_str[j], num_to_str[i] # returning the largest number. return int("".join(temp)) # main function def main(): A = int(432) print(largestNum(A)) A = int(2736) print(largestNum(A)) A = int(4596) print(largestNum(A)) # calling main function if __name__=="__main__": main()
C#
// C# code to find largest number // with given conditions. using System; public class LargestNumber { static String swap(String str, int i, int j) { char[] ch = str.ToCharArray(); char temp = ch[i]; ch[i] = ch[j]; ch[j] = temp; String c = String.Join("", ch); return c; } // function to find the largest number // with given conditions. static int largestNum(int num) { // converting the number to the string String num_in_str = "" + num; String temp = num_in_str; // swapping each digit for (int i = 0; i < num_in_str.Length; i++) { for (int j = i + 1; j < num_in_str.Length; j++) { // Swapping and checking for the larger num_in_str = swap(num_in_str, i, j); if (temp.CompareTo(num_in_str) < 0) temp = num_in_str; // Reverting the changes num_in_str = swap(num_in_str, i, j); } } return Convert.ToInt32(temp); } // Driver code public static void Main(String[] s) { int num = 423; Console.WriteLine(largestNum(num)); num = 2736; Console.WriteLine(largestNum(num)); num = 4596; Console.WriteLine(largestNum(num)); } } // This code is contributed by 29AjayKumar
Javascript
<script> // JavaScript code to find largest number with // given conditions. // function to find the largest number // with given conditions. function largestNum(num) { // converting the number to the string var num_in_str = (num.toString().split('')); var temp = JSON.parse(JSON.stringify(num_in_str)); // swapping each digit for (var i = 0; i < num_in_str.length; i++) { for (var j = i + 1; j < num_in_str.length; j++) { // Swapping and checking for the larger [num_in_str[i], num_in_str[j]] = [num_in_str[j], num_in_str[i]]; if (parseInt(num_in_str.join('')) > parseInt(temp.join(''))) temp = JSON.parse(JSON.stringify(num_in_str)); // Reverting the changes [num_in_str[i], num_in_str[j]] = [num_in_str[j], num_in_str[i]]; } } return parseInt(temp.join('')); } // driver function var num = 432; document.write( largestNum(num) + "<br>"); num = 2736; document.write( largestNum(num) + "<br>"); num = 4596; document.write( largestNum(num) + "<br>"); </script>
Producción:
432 7236 9546
Enfoque 2 (eficiente):
escanearemos el número desde la dirección hacia atrás. En el escaneo, si el dígito i es el más grande con diferencia, guárdelo junto con su índice o si el dígito actual es más pequeño que el dígito más grande registrado con diferencia, este dígito y el dígito más grande son los más adecuados para el intercambio.
A continuación se muestra la implementación del enfoque anterior.
C++
// code to find largest number with // given conditions. #include <bits/stdc++.h> using namespace std; // function to find the largest number // with given conditions. int largestNum(int num) { int max_digit = -1; int max_digit_indx = -1; int l_indx = -1; int r_indx = -1; // converting the number to string string num_in_str = to_string(num); for (int i = num_in_str.size() - 1; i >= 0; i--) { // current digit is the largest by far if (num_in_str[i] > max_digit) { max_digit = num_in_str[i]; max_digit_indx = i; continue; } // best digit for swap if there is no more // such situation on the left side if (num_in_str[i] < max_digit) { l_indx = i; r_indx = max_digit_indx; } } // check for is number already in order if (l_indx == -1) return num; swap(num_in_str[l_indx], num_in_str[r_indx]); return stoi(num_in_str); } // driver function int main() { int num = 789; cout << largestNum(num) << endl; num = 49658; cout << largestNum(num) << endl; num = 2135; cout << largestNum(num) << endl; return 0; }
Java
// Java to find largest number with // given conditions. class GFG { // function to find the largest number // with given conditions. static int largestNum(int num) { int max_digit = -1; int max_digit_indx = -1; int l_indx = -1; int r_indx = 1; // converting the number to string String num_in_str = String.valueOf(num); for (int i = num_in_str.length() - 1; i >= 0; i--) { // current digit is the largest by far if (num_in_str.charAt(r_indx) > max_digit) { max_digit = num_in_str.charAt(i); max_digit_indx = i; continue; } // best digit for swap if there is no more // such situation on the left side if (num_in_str.charAt(i) < max_digit) { l_indx = i; r_indx = max_digit_indx; } } // check for is number already in order if (l_indx == -1) return num; num_in_str = swap(num_in_str, l_indx, r_indx); return Integer.parseInt(num_in_str); } static String swap(String arr, int i, int j) { char temp[] = arr.toCharArray(); char c = temp[i]; temp[i] = temp[j]; temp[j] = c; return String.valueOf(temp); } // Driver code public static void main(String[] args) { int num = 789; System.out.println(largestNum(num)); num = 49658; System.out.println(largestNum(num)); num = 2135; System.out.println(largestNum(num)); } } // This code contributed by Rajput-Ji
Python3
# Python3 to find largest number with # given conditions. # Function to find the largest number # with given conditions. def largestNum(num): max_digit = -1 max_digit_indx = -1 l_indx = -1 r_indx = 1 # converting the number to string num_in_str = list(str(num)) for i in range(len(num_in_str) - 1, -1, -1): # current digit is the largest by far if int(num_in_str[i]) > int(max_digit): max_digit = num_in_str[i] max_digit_indx = i continue # best digit for swap if there is no more # such situation on the left side if int(num_in_str[i]) < int(max_digit): l_indx = i r_indx = max_digit_indx # check for is number already in order if l_indx == -1: return num num_in_str[l_indx], num_in_str[r_indx] = \ num_in_str[r_indx], num_in_str[l_indx] return int(''.join(num_in_str)) # Driver Code num = 789 print(largestNum(num)) num = 49658 print(largestNum(num)) num = 2135 print(largestNum(num)) # This code is contributed by Gowtham Yuvaraj
C#
// C# to find largest number with // given conditions. using System; class GFG { // function to find the largest number // with given conditions. static int largestNum(int num) { int max_digit = -1; int max_digit_indx = -1; int l_indx = -1; int r_indx = 1; // converting the number to string String num_in_str = String.Join("", num); for (int i = num_in_str.Length - 1; i >= 0; i--) { // current digit is the largest by far if (num_in_str[r_indx] > max_digit) { max_digit = num_in_str[i]; max_digit_indx = i; continue; } // best digit for swap if there is no more // such situation on the left side if (num_in_str[i] < max_digit) { l_indx = i; r_indx = max_digit_indx; } } // check for is number already in order if (l_indx == -1) return num; num_in_str = swap(num_in_str, l_indx, r_indx); return int.Parse(num_in_str); } static String swap(String arr, int i, int j) { char[] temp = arr.ToCharArray(); char c = temp[i]; temp[i] = temp[j]; temp[j] = c; return String.Join("", temp); } // Driver code public static void Main(String[] args) { int num = 789; Console.WriteLine(largestNum(num)); num = 49658; Console.WriteLine(largestNum(num)); num = 2135; Console.WriteLine(largestNum(num)); } } /* This code contributed by PrinciRaj1992 */
Producción:
987 94658 5132
Publicación traducida automáticamente
Artículo escrito por Abhishek Sharma 44 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA