Número Tidy son aquellos números cuyos dígitos están ordenados en orden no decreciente. Aquí, se nos da un número y tenemos que encontrar otro número que sea más pequeño pero más cercano al número dado y también ese número debe estar ordenado, es decir, su dígito debe estar en orden no decreciente.
Ejemplos:
Input : 91234 Output : 89999 Tidy property is violated by appearing 1 after 9. So, we will reduce 9 by 1 and the number right to it will be replaced by 9. So, generated tidy number is 89999. Input : 45000 Output : 44999
La idea es atravesar desde el final. Cada vez que se viola la propiedad ordenada, reducimos el dígito en uno y convertimos todos los dígitos posteriores en 9.
C++
// C++ program to find closest // tidy number smaller than the // given number #include<bits/stdc++.h> using namespace std; char* tidyNum(char str[], int len) { for (int i = len-2; i >= 0; i--) { // check whether string violates tidy property if (str[i] > str[i+1]) { // if string violates tidy property, then // decrease the value stored at that index by 1 // and replace all the value stored right to // that index by 9 (char)str[i]--; for (int j=i+1; j<len; j++) str[j] = '9'; } } return str; } // Driver code int main() { char str[] = "11333445538"; int len = strlen(str); // num will store closest tidy number char *num = tidyNum(str, len); printf("%s\n", num); return 0; }
Java
// Java program to find closest // tidy number smaller than the // given number import java.io.*; class GFG { static String tidyNum(String str1, int len) { char[] str = str1.toCharArray(); for (int i = len - 2; i >= 0; i--) { // check whether string // violates tidy property if (str[i] > str[i + 1]) { // if string violates tidy // property, then decrease the // value stored at that index // by 1 and replace all the value // stored right to that index by 9 str[i]--; for (int j = i + 1; j < len; j++) str[j] = '9'; } } return String.valueOf(str); } // Driver code public static void main(String[] args) { String str = "11333445538"; int len = str.length(); // num will store closest tidy number System.out.println(tidyNum(str, len)); } } // This code is contributed by mits
Python3
# Python 3 program to find closest # tidy number smaller than the # given number def tidyNum(str, len): for i in range(len-2, -1, -1): # check whether string # violates tidy property if (str[i] > str[i+1]): # if string violates tidy # property, then decrease the # value stored at that index by 1 # and replace all the value # stored right to that index by 9 str[i] -= 1 for j in range(i+1, len): str[j] = 9 return str # Driver code str = [1,1,3,3,3,4,4,5,5,3,8] len = len(str) # num will store closest tidy number num = tidyNum(str, len) for i in range(0,len): print(str[i], end = "") # This code is contributed by # Smitha Dinesh Semwal
C#
// C# program to find closest // tidy number smaller than the // given number using System; class GFG { static String tidyNum(String str1, int len) { char[] str = str1.ToCharArray(); for (int i = len - 2; i >= 0; i--) { // check whether string // violates tidy property if (str[i] > str[i + 1]) { // if string violates tidy // property, then decrease the // value stored at that index // by 1 and replace all the value // stored right to that index by 9 str[i]--; for (int j = i + 1; j < len; j++) str[j] = '9'; } } string s = new string(str); return s; } // Driver code static void Main() { String str = "11333445538"; int len = str.Length; // num will store closest tidy number Console.WriteLine(tidyNum(str, len)); } } // This code is contributed by mits
PHP
<?php // PHP program to find closest // tidy number smaller than the // given number function tidyNum($str, $len) { for ($i = $len - 2; $i >= 0; $i--) { // check whether string // violates tidy property if ($str[$i] > $str[$i + 1]) { // if string violates tidy // property, then decrease // the value stored at that // index by 1 and replace all // the value stored right to // that index by 9 $x = ord($str[$i]); $x--; $str[$i] = chr($x); for ($j = $i + 1; $j < $len; $j++) $str[$j] = '9'; } } return $str; } // Driver code $str = "11333445538"; $len = strlen($str); // num will store // closest tidy number $num = tidyNum($str, $len); echo $num; // This code is contributed by mits ?>
Javascript
<script> // Javascript program to find closest // tidy number smaller than the // given number function tidyNum(str1, len) { var str = str1.split(''); for (i = len - 2; i >= 0; i--) { // Check whether string // violates tidy property if (str[i] > str[i + 1]) { // If string violates tidy // property, then decrease the // value stored at that index // by 1 and replace all the value // stored right to that index by 9 str[i]--; for(j = i + 1; j < len; j++) str[j] = '9'; } } return str.join(""); } // Driver code var str = "11333445538"; var len = str.length; // num will store closest tidy number document.write(tidyNum(str, len)); // This code is contributed by Amit Katiyar </script>
Producción:
11333444999
Referencias:
esta pregunta se hace en la ronda de clasificación de Google Code Jam 2017.
Este artículo es una contribución de Aditya kumar . 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 contribuido@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
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