Dado un número N, la tarea es encontrar el número más pequeño no menor que N, que tenga todos los dígitos impares.
Ejemplos:
Input: N = 1345 Output: 1351 1351 is the smallest number not less than N, whose all digits are odd. Input: N = 2397 Output: 3111 3111 is the smallest number not less than N, whose all digits are odd.
Enfoque ingenuo : un enfoque ingenuo es seguir iterando desde N hasta que encontremos un número con todos los dígitos impares.
A continuación se muestra la implementación del enfoque anterior:
C++
// CPP program to print the smallest // integer not less than N with all odd digits #include <bits/stdc++.h> using namespace std; // function to check if all digits // are odd of a given number int check_digits(int n) { // iterate for all digits while (n) { if ((n % 10) % 2 == 0) // if digit is even return 0; n /= 10; } // all digits are odd return 1; } // function to return the smallest number // with all digits odd int smallest_number(int n) { // iterate till we find a // number with all digits odd for (int i = n;; i++) if (check_digits(i)) return i; } // Driver Code int main() { int N = 2397; cout << smallest_number(N); return 0; }
Java
// Java program to print the smallest // integer not less than N with all odd digits class Geeks { // function to check if all digits // are odd of a given number static int check_digits(int n) { // iterate for all digits while (n > 0) { if ((n % 10) % 2 == 0) // if digit is even return 0; n /= 10; } // all digits are odd return 1; } // function to return the smallest number // with all digits odd static int smallest_number(int n) { // iterate till we find a // number with all digits odd for (int i = n;; i++) if (check_digits(i) > 0) return i; } // Driver Code public static void main(String args[]) { int N = 2397; System.out.println(smallest_number(N)); } } // This code is contributed by Kirti_Mangal
Python3
# Python 3 program to print the smallest # integer not less than N with all odd digits # function to check if all digits # are odd of a given number def check_digits(n): # iterate for all digits while (n): # if digit is even if ((n % 10) % 2 == 0): return 0 n = int(n / 10) # all digits are odd return 1 # function to return the smallest # number with all digits odd def smallest_number(n): # iterate till we find a # number with all digits odd i = n while(1): if (check_digits(i)): return i i += 1 # Driver Code if __name__ == '__main__': N = 2397 print(smallest_number(N)) # This code is contributed by # Sanjit_Prasad
C#
// C# program to print the smallest // integer not less than N with all // odd digits using System; class GFG { // function to check if all digits // are odd of a given number static int check_digits(int n) { // iterate for all digits while (n != 0) { if ((n % 10) % 2 == 0) // if digit is even return 0; n /= 10; } // all digits are odd return 1; } // function to return the smallest // number with all digits odd static int smallest_number(int n) { // iterate till we find a // number with all digits odd for (int i = n;; i++) if (check_digits(i) == 1) return i; } // Driver Code static void Main() { int N = 2397; Console.WriteLine(smallest_number(N)); } } // This code is contributed by ANKITRAI1
PHP
<?php // PHP program to print the smallest // integer not less than N with all // odd digits // function to check if all digits // are odd of a given number function check_digits($n) { // iterate for all digits while ($n > 1) { // if digit is even if (($n % 10) % 2 == 0) return 0; $n = (int)$n / 10; } // all digits are odd return 1; } // function to return the smallest // number with all digits odd function smallest_number( $n) { // iterate till we find a // number with all digits odd for ($i = $n;; $i++) if (check_digits($i)) return $i; } // Driver Code $N = 2397; echo smallest_number($N); // This code is contributed by ajit ?>
Javascript
<script> // java script program to print the smallest // integer not less than N with all // odd digits // function to check if all digits // are odd of a given number function check_digits(n) { // iterate for all digits while (n > 1) { // if digit is even if ((n % 10) % 2 == 0) return 0; n = parseInt(n / 10); } // all digits are odd return 1; } // function to return the smallest // number with all digits odd function smallest_number( n) { // iterate till we find a // number with all digits odd for (i = n;; i++) if (check_digits(i)) return i; } // Driver Code let N = 2397; document.write( smallest_number(N)); // This code is contributed by sravan kumar (vignan) </script>
3111
Complejidad de Tiempo: O(N), Espacio Auxiliar: O(1)
Enfoque eficiente: podemos encontrar el número aumentando el primer dígito par en N en uno y reemplazando todos los dígitos a la derecha de ese dígito impar con el dígito impar más pequeño (es decir, 1). Si no hay dígitos pares en N, entonces N es el número más pequeño. Por ejemplo, considere N = 213. Incremente el primer dígito par en N, es decir, 2 a 3 y reemplace todos los dígitos por 1. Entonces, nuestro número requerido será 311.
A continuación se muestra la implementación del enfoque eficiente:
C++
// CPP program to print the smallest // integer not less than N with all odd digits #include <bits/stdc++.h> using namespace std; // function to return the smallest number // with all digits odd int smallestNumber(int n) { int num = 0; string s = ""; int duplicate = n; // convert the number to string to // perform operations while (n) { s = char(n % 10 + 48) + s; n /= 10; } int index = -1; // find out the first even number for (int i = 0; i < s.length(); i++) { int digit = s[i] - '0'; if ((digit & 1) == 0) { index = i; break; } } // if no even numbers are there, than n is the answer if (index == -1) return duplicate; // add all digits till first even for (int i = 0; i < index; i++) num = num * 10 + (s[i] - '0'); // increase the even digit by 1 num = num * 10 + (s[index] - '0' + 1); // add 1 to the right of the even number for (int i = index + 1; i < s.length(); i++) num = num * 10 + 1; return num; } // Driver Code int main() { int N = 2397; cout << smallestNumber(N); return 0; }
Java
//Java program to print the smallest // integer not less than N with all odd digits public class GFG { // function to return the smallest number // with all digits odd static int smallestNumber(int n) { int num = 0; String s = ""; int duplicate = n; // convert the number to string to // perform operations while (n > 0) { s = (char) (n % 10 + 48) + s; n /= 10; } int index = -1; // find out the first even number for (int i = 0; i < s.length(); i++) { int digit = s.charAt(i) - '0'; if ((digit & 1) == 0) { index = i; break; } } // if no even numbers are there, than n is the answer if (index == -1) { return duplicate; } // add all digits till first even for (int i = 0; i < index; i++) { num = num * 10 + (s.charAt(i) - '0'); } // increase the even digit by 1 num = num * 10 + (s.charAt(index) - '0' + 1); // add 1 to the right of the even number for (int i = index + 1; i < s.length(); i++) { num = num * 10 + 1; } return num; } // Driver Code static public void main(String[] args) { int N = 2397; System.out.println(smallestNumber(N)); } } /*This code is contributed by PrinciRaj1992*/
Python 3
# Python 3 program to print the smallest # integer not less than N with all odd digits # function to return the smallest # number with all digits odd def smallestNumber(n): num = 0 s = "" duplicate = n # convert the number to string to # perform operations while (n): s = chr(n % 10 + 48) + s n //= 10 index = -1 # find out the first even number for i in range(len( s)): digit = ord(s[i]) - ord('0') if ((digit & 1) == 0) : index = i break # if no even numbers are there, # than n is the answer if (index == -1): return duplicate # add all digits till first even for i in range( index): num = num * 10 + (ord(s[i]) - ord('0')) # increase the even digit by 1 num = num * 10 + (ord(s[index]) - ord('0') + 1) # add 1 to the right of the # even number for i in range(index + 1 , len(s)): num = num * 10 + 1 return num # Driver Code if __name__ == "__main__": N = 2397 print(smallestNumber(N)) # This code is contributed by ita_c
C#
// C# program to print the smallest // integer not less than N with all odd digits using System; public class GFG{ // function to return the smallest number // with all digits odd static int smallestNumber(int n) { int num = 0; String s = ""; int duplicate = n; // convert the number to string to // perform operations while (n > 0) { s = (char) (n % 10 + 48) + s; n /= 10; } int index = -1; // find out the first even number for (int i = 0; i < s.Length; i++) { int digit = s[i] - '0'; if ((digit & 1) == 0) { index = i; break; } } // if no even numbers are there, than n is the answer if (index == -1) { return duplicate; } // add all digits till first even for (int i = 0; i < index; i++) { num = num * 10 + (s[i] - '0'); } // increase the even digit by 1 num = num * 10 + (s[index] - '0' + 1); // add 1 to the right of the even number for (int i = index + 1; i < s.Length; i++) { num = num * 10 + 1; } return num; } // Driver Code static public void Main() { int N = 2397; Console.WriteLine(smallestNumber(N)); } } // This code is contributed by PrinciRaj1992
Javascript
<script> // Javascript program to print the smallest // integer not less than N with all odd digits // function to return the smallest number // with all digits odd function smallestNumber(n) { var num = 0; var s = ""; var duplicate = n; // convert the number to string to // perform operations while (n) { s = String.fromCharCode(n % 10 + 48) + s; n = parseInt(n/10); } var index = -1; // find out the first even number for (var i = 0; i < s.length; i++) { var digit = s[i].charCodeAt(0) - '0'.charCodeAt(0); if ((digit & 1) == 0) { index = i; break; } } // if no even numbers are there, than n is the answer if (index == -1) return duplicate; // add all digits till first even for (var i = 0; i < index; i++) num = num * 10 + (s[i].charCodeAt(0) - '0'.charCodeAt(0)); // increase the even digit by 1 num = num * 10 + (s[index].charCodeAt(0) - '0'.charCodeAt(0) + 1); // add 1 to the right of the even number for (var i = index + 1; i < s.length; i++) num = num * 10 + 1; return num; } // Driver Code var N = 2397; document.write( smallestNumber(N)); </script>
3111
Complejidad temporal: O(M), donde M es el número de dígitos de N.
Publicación traducida automáticamente
Artículo escrito por Shivam.Pradhan y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA