elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Numeros capicu del 100 al 999,
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Numeros capicu del 100 al 999,  (Leído 5,037 veces)
Dumy

Desconectado Desconectado

Mensajes: 17


Ver Perfil
Numeros capicu del 100 al 999,
« en: 20 Octubre 2023, 19:56 pm »

Hola estoy intentando un algoritmo que encuentre 150 numetos que empiecen por el mismo  digito, el problema ss que cuando llego a 100, la firmula de seoarar numeros en digitos de / 10 %10, deja de funcionar y no se como seguir el codigo:

Código
  1. #include <stdio.h>
  2. #include <stdbool.h>
  3. #include <conio.h>
  4. #include <string.h>
  5.  
  6. int main(void) {
  7.    int n,cociente;
  8.    bool contador,capicua;
  9.  
  10.    n = 0;
  11.    contador = 0;
  12.  
  13.  
  14.    for(n = 0; n <= 9999; n++) {
  15.  
  16.  
  17.        printf("%d",n);
  18.        printf(" - ");
  19.  
  20.        while(n <= 10000) {
  21.  
  22.            capicua = false;
  23.  
  24.            n+=1;
  25.  
  26.            int u,d,c,u_m;
  27.  
  28.            if (n <=9) {
  29.  
  30.                capicua = true;
  31.  
  32.                if (capicua = true) {
  33.  
  34.                    printf("\n");
  35.                    printf("Es cap y cua: %d",n);
  36.                    printf("\n");
  37.                }
  38.  
  39.            } else {
  40.  
  41.                if ((n >=10 ) && (n <=100)) {
  42.  
  43.                    capicua = false;
  44.  
  45.  
  46.                    d = n / 10;
  47.                    u = (n% 10) / 1;
  48.  
  49.                    if (u != d) {
  50.  
  51.  
  52.                    } else {
  53.  
  54.                        u == d;
  55.  
  56.                        capicua = true;
  57.  
  58.                        printf("\n \n");
  59.                        printf("Es cap i cua: %d",n);
  60.  
  61.                        if ((n >100) && (n <=200)) {
  62.  
  63.                            c =n/100;
  64.  
  65.  
  66.                            printf("%d",n);
  67.  
  68.  
  69.                        }
  70.  
  71.                    }
  72.  
  73.  
  74.  
  75.                }
  76.  
  77.            }
  78.  
  79.        }
  80.  
  81.  
  82.  
  83.  
  84.  
  85.  
  86.  
  87.  
  88.  
  89.    }
  90.    return 0;
  91. }

Si alguien porfavor supiera una formula que se pare los numeros del 100 al 999, por favor que lo diga

MOD: Etiqueta GeSHi


« Última modificación: 20 Octubre 2023, 20:50 pm por MCKSys Argentina » En línea

Locura_23

Desconectado Desconectado

Mensajes: 162



Ver Perfil
Re: Numeros capicu del 100 al 999,
« Respuesta #1 en: 21 Octubre 2023, 21:20 pm »

Hola,
hay errores en el código, mas bien de tipo lógicos sobretodo.
En general para este tipo de programas, es recomendable pensar y escribir en lapiz y papel, la lógica principal. Parecen simples pero no lo son si no se piensa con tiempo.

Es decir:
- qué es un número capicua? cuando el número se lee igual al revez y al derecho.

- cómo saco el primer digito y ultimo digito de un numero, sin importar la longitud? este el problema central.

Si conoces el concepto de arreglos, el problema se hace más simple, ya que puedes pasar el número sin importar su longitud, a un arreglo de enteros. Luego con un contador desde el inicio y otro contador al final, puedes evaluar por posicion de arreglo cada valor, donde si todos son iguales, es capicua.


En línea

Dumy

Desconectado Desconectado

Mensajes: 17


Ver Perfil
Re: Numeros capicu del 100 al 999,
« Respuesta #2 en: 23 Octubre 2023, 12:05 pm »

E conseguido cierto exito con numeros de 3 digitos:

#include <stdio.h>
#include <stdbool.h>
#include <conio.h>
#include <string.h>

int main(void) {
    int n,cociente;
    bool contador,capicua;

    n = 0;
    contador = 0;


    while(n <= 10000) {


        printf("%d",n);
        printf(" - ");


        while(n <= 10000 && contador <= 150) {

            capicua = false;

            n+=1;

            int u,d,c,um;

            if (n <=9) {

                capicua = true;

                if (capicua = true) {

                    printf("\n");
                    printf("Es cap y cua: %d",n);
                    printf("\n");
                }

            } else {

                if ((n >=10 ) && (n <=100)) {

                    capicua = false;


                    d = n / 10;
                    u = (n% 10) / 1;

                    if (u == d) {

                        u == d;

                        capicua = true;

                        printf("\n \n");
                        printf("Es cap i cua: %d",n);
                        printf("\n");
                    }


                } else {

                    if((n >100) && (n <=1000))
                    {

                        int a, b;

                        a=trunc(n/100);
                        b=n % 10;

                        if(a==b) {

                            capicua = true;

                            printf("\n");
                            printf("Es cap y cua: %d",n);
                            printf("\n");
                            printf("%d %d",a,b);
                            printf("\n");
                            printf("");

                        } else {

                            if ((n >=1000) && (n <=10000)) {


                            }



                        }


                    }
                }




            }

        }

    }




    return 0;
}

Ahora necesito la formula para los njmeros de 1000 hasta 10000, si alguien me la diera, seria de agradecee
En línea

Tachikomaia


Desconectado Desconectado

Mensajes: 1.217


Superhacker (es broma xD )


Ver Perfil
Re: Numeros capicu del 100 al 999,
« Respuesta #3 en: 23 Octubre 2023, 12:59 pm »

1: No sé C++.
2: No entiendo lo que dices, incluso tu código tiene muchos saltos de línea y así menos ganas dan de intentar entender.

Si lo que quieres es hallar los 1eros 150 números enteros desde el 10 que sean capicúa, no parece tan difícil.

Capicúa tengo entendido que es cuando leyéndolo de derecha a izquierda resulta igual que leyéndolo normal.

Si es eso, sería algo como:
Código:
Número = 10
Lista = ""
Encontrados = 0
Repetir
  Si Número es capicúa
    agregar Número a la lista
    Encontrados++
  fin del si
  Número++
mientras Encontrados < 150

Lo único que parece "complicado" de hacer de eso es el chequeo de si es capicúa.

Sería algo como:
Código:
CaracteraChequear = 1
Texto = ConvertirenTexto(Número)
EsCapicúa = true
ChequearHastaCaracter = QuitarDecimales(Número/2)
Repetir:
  Si Parte(CaracteraChequear)deTexto != Parte(Longitudde(Texto)-CaracteraChequear)deTexto
    EsCapicúa = false
    CaracteraChequear = ChequearHasta
  fin del si
  CaracteraChequear++
mientras CaracteraChequear <= ChequearHasta

Quizá en tu lenguaje CaracteraChequear debe iniciar como 0 y en el chequeo restar 1 a la longitud, el mío es así también, pero lo puse de este otro modo para simplificar.
Quizá en vez de quitar decimales te conviene redondear+ y quitar el = del mientras, tendría que probar.
Esas instrucciones que digo deberían estar en tu lenguaje, llamadas de alguna manera.

Incluso puedes chequear las igualdades 2 veces y no te complicas con eso, si son números cortos; yo lo hice así para evitar chequeos innecesarios. De hecho quizá alguien que sepa mucho de Matemática sabe hacerlo sin ifs.

Bueno, lo que se hace es chequear que los 1eros caracteres del número sean iguales a los últimos. Si tuviera 5 caracteres se chequea el 1 y el 5, luego el 2 y el 4, y luego nada. Porque se chequea hasta la mitad, y si tiene decimales se les quita. 5/2=2,5, pero sin decimales es 2, ergo se chequea hasta el 2.
Si tuviera 6 caracteres, hasta el 3.
Si tuviera 4, hasta el 2.

Creo que eso es todo...

Edit: Ahora veo que es desde el 100, bueno, más fácil, pones 100 donde dice 10 y debería funcionar igual. Para que se frene en el 999 puedes poner una condición or en el while.

"1000 hasta 10000"
Lo que te dije funciona para eso también, pero deberías pedir las cosas de forma clara desde el inicio, no tiene sentido que cambies lo que pides así como si fuese algo random.
« Última modificación: 23 Octubre 2023, 13:06 pm por Tachikomaia » En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: Numeros capicu del 100 al 999,
« Respuesta #4 en: 24 Octubre 2023, 22:13 pm »

Sigue la secuencia.

Del 1 al 10 hay 9.
Del 11 al 100 hay 9.
Del 101 al 1000 hay 90.
Del 1001 al 10000 hay 90.
Del 10001 al 100000 hay 900.
Del 100001 al 1000000 hay 900.
Del 1000001 al 10000000 hay 9000.
Del 10000001 al 100000000 hay 9000.
En línea

Dumy

Desconectado Desconectado

Mensajes: 17


Ver Perfil
Re: Numeros capicu del 100 al 999,
« Respuesta #5 en: 26 Octubre 2023, 19:30 pm »

Ya lo solucione, gracjas por responder
En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: Numeros capicu del 100 al 999,
« Respuesta #6 en: 26 Octubre 2023, 19:35 pm »

¿Cómo lo hiciste?
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines