Generar todos los números palindrómicos menores que n

Encuentra todos los números menores que n, que son palindrómicos. Los números se pueden imprimir en cualquier orden.

Ejemplos: 

Input : n = 12
Output : 1, 2, 3, 4, 5, 6, 7, 8, 9, 11

Input : n = 104
Output : 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 
         22, 33, 44, 55, 66, 77, 88, 99, 101
[Note that below program prints these numbers
 in different order]
 

Fuerza Bruta: Comprobamos todos los números del 1 al n si su representación decimal es palíndromo o no. 

Enfoque Eficiente: Partimos de 1 y creamos palíndromos de dígitos pares e impares hasta n. Para cada número (a partir de 1), agregamos su reverso al final si necesitamos números palíndromos de longitud uniforme. Para palíndromos de longitud impar, agregamos el reverso de todos los dígitos excepto el último. 

C++

// A C++ program to generate palindromic numbers
// less than n.
#include <iostream>
using namespace std;
 
// A utility for creating palindrome
int createPalindrome(int input, int b, bool isOdd)
{
    int n = input;
    int palin = input;
 
    // checks if number of digits is odd or even
    // if odd then neglect the last digit of input in
    // finding reverse as in case of odd number of
    // digits middle element occur once
    if (isOdd)
        n /= b;
 
    // Creates palindrome by just appending reverse
    // of number to itself
    while (n > 0)
    {
        palin = palin * b + (n % b);
        n /= b;
    }
    return palin;
}
 
// Function to print decimal palindromic number
void generatePalindromes(int n)
{
    int number;
 
    // Run two times for odd and even length palindromes
    for (int j = 0; j < 2; j++)
    {
        // Creates palindrome numbers with first half as i.
        // Value of j decided whether we need an odd length
        // of even length palindrome.
        int i = 1;
        while ((number = createPalindrome(i, 10, j % 2)) < n)
        {
            cout << number << " ";
            i++;
        }
    }
}
 
// Driver Program to test above function
int main()
{
    int n = 104;
    generatePalindromes(n);
    return 0;
}

Java

// A Java program to generate palindromic
// numbers less than n.
class GFG {
 
// A utility for creating palindrome
static int createPalindrome(int input, int b, int isOdd) {
    int n = input;
    int palin = input;
 
    // checks if number of digits is odd or even
    // if odd then neglect the last digit of input in
    // finding reverse as in case of odd number of
    // digits middle element occur once
    if (isOdd == 1)
        n /= b;
 
    // Creates palindrome by just appending reverse
    // of number to itself
    while (n > 0) {
        palin = palin * b + (n % b);
        n /= b;
    }
    return palin;
}
 
// Function to print decimal
// palindromic number
static void generatePalindromes(int n) {
    int number;
 
    // Run two times for odd and even
    // length palindromes
    for (int j = 0; j < 2; j++) {
 
    // Creates palindrome numbers with first
    // half as i. Value of j decided whether
    // we need an odd length of even length
    // palindrome.
        int i = 1;
        while ((number = createPalindrome(i, 10, j % 2)) < n) {
            System.out.print(number + " ");
            i++;
    }
    }
}
 
// Driver code
public static void main(String[] args) {
    int n = 104;
    generatePalindromes(n);
}
}
// This code is contributed by Anant Agarwal.

Python3

# Generate all palindromic numbers less than n
# A Python program to generate palindromic numbers
# less than n.
def createPalindrome(inp, b, isOdd):
    n = inp
    palin = inp
  
    # checks if number of digits is odd or even
    # if odd then neglect the last digit of input in
    # finding reverse as in case of odd number of
    # digits middle element occur once
    if (isOdd):
        n = n // b
  
    # Creates palindrome by just appending reverse
    # of number to itself
    while (n > 0):
        palin = palin * b + (n % b)
        n = n // b
    return palin
  
# Function to print decimal palindromic number
def generatePalindromes(n):
  
    # Run two times for odd and even length palindromes
    for j in range(2):
        # Creates palindrome numbers with first half as i.
        # Value of j decided whether we need an odd length
        # of even length palindrome.
        i = 1
        while (createPalindrome(i, 10, j % 2) < n):
            print (createPalindrome(i, 10, j % 2),end=" ")
            i = i + 1
  
# Driver Program to test above function
n = 104
generatePalindromes(n)
 
#This code is contributed by Afzal Ansari

C#

// A C# program to generate palindromic
// numbers less than n.
using System;
 
class GFG {
 
// A utility for creating palindrome
static int createPalindrome(int input, int b,
                            int isOdd)
{
    int n = input;
    int palin = input;
 
    // checks if number of digits is odd
    // or even if odd then neglect the
    // last digit of input in finding reverse
    // as in case of odd number of digits
    // middle element occur once
    if (isOdd == 1)
        n /= b;
 
    // Creates palindrome by just appending
    // reverse of number to itself
    while (n > 0)
    {
        palin = palin * b + (n % b);
        n /= b;
    }
    return palin;
}
 
// Function to print decimal
// palindromic number
static void generatePalindromes(int n)
{
    int number;
 
    // Run two times for odd and even
    // length palindromes
    for (int j = 0; j < 2; j++)
    {
 
        // Creates palindrome numbers with first
        // half as i. Value of j decided whether
        // we need an odd length of even length
        // palindrome.
        int i = 1;
        while ((number = createPalindrome(i, 10,
                                    j % 2)) < n)
        {
            Console.Write(number + " ");
            i++;
    }
    }
}
 
// Driver Code
public static void Main()
{
    int n = 104;
    generatePalindromes(n);
}
}
 
// This code is contributed by Nitin Mittal.

PHP

<?php
// PHP program to generate
// palindromic numbers less than n.
 
// A utility function for
// creating palindrome
function createPalindrome($input,
                          $b, $isOdd)
{
    $n = $input;
    $palin = $input;
 
    // checks if number of digits is
    // odd or even if odd then neglect
    // the last digit of input in finding
    // reverse as in case of odd number
    // of digits middle element occur once
    if ($isOdd)
        $n = intval($n / $b);
 
    // Creates palindrome by just appending
    // reverse of number to itself
    while ($n > 0)
    {
        $palin = $palin * $b + intval($n % $b);
        $n = intval($n / $b);
    }
    return $palin;
}
 
// Function to print decimal
// palindromic number
function generatePalindromes($n)
{
    $number = 0;
 
    // Run two times for odd and
    // even length palindromes
    for ($j = 0; $j < 2; $j++)
    {
        // Creates palindrome numbers
        // with first half as i. Value
        // of j decided whether we need
        // an odd length of even length
        // palindrome.
        $i = 1;
        while (($number =
                   createPalindrome($i, 10,
                                    $j % 2)) < $n)
        {
            echo $number . " ";
            $i++;
        }
    }
}
 
// Driver Code
$n = 104;
generatePalindromes($n);
     
// This code is contributed by Sam007
?>

Javascript

<script>
    // A Javascript program to generate palindromic
    // numbers less than n.
     
    // A utility for creating palindrome
    function createPalindrome(input, b, isOdd)
    {
        let n = input;
        let palin = input;
 
        // checks if number of digits is odd
        // or even if odd then neglect the
        // last digit of input in finding reverse
        // as in case of odd number of digits
        // middle element occur once
        if (isOdd == 1)
            n = parseInt(n / b, 10);
 
        // Creates palindrome by just appending
        // reverse of number to itself
        while (n > 0)
        {
            palin = palin * b + (n % b);
            n = parseInt(n / b, 10);
        }
        return palin;
    }
 
    // Function to print decimal
    // palindromic number
    function generatePalindromes(n)
    {
        let number;
 
        // Run two times for odd and even
        // length palindromes
        for (let j = 0; j < 2; j++)
        {
 
            // Creates palindrome numbers with first
            // half as i. Value of j decided whether
            // we need an odd length of even length
            // palindrome.
            let i = 1;
            while ((number = createPalindrome(i, 10, j % 2)) < n)
            {
                document.write(number + " ");
                i++;
            }
        }
    }
     
    let n = 104;
    generatePalindromes(n);
    
   // This code is contributed by divyesh072019.
</script>

Producción : 

11 22 33 44 55 66 77 88 99 1 2 3 4 5 6 7 8 9 101 

Tenga en cuenta que el programa anterior no imprime la salida en orden ordenado. Para imprimir en orden ordenado, podemos almacenar palíndromos en un vector y ordenarlo, y no olvide usar el archivo de encabezado requerido.

Este artículo es una contribución de Shivam Pradhan (anuj_charm) . 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.
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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *