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

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [DUDA] Comprobar si un número es ondulado
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [DUDA] Comprobar si un número es ondulado  (Leído 7,324 veces)
Kropt32

Desconectado Desconectado

Mensajes: 34


Ver Perfil
[DUDA] Comprobar si un número es ondulado
« en: 15 Diciembre 2010, 00:22 am »

En primer lugar, ¿Qué es un número ondulado?

Un entero positivo es ondulado si sus dígitos se van repitiendo en la forma ababab.... Sólo hay dos dígitos (a y b) que se repiten.
Casos especiales:
 - Todos los enteros menores estrictos que 100 son ondulados.
 - Los enteros de la forma ababa son ondulados. Es decir, lo importante es que se vayan alternando los dos dígitos.

Ejemplos de números ondulados: 2, 82, 737, 1010, 10101, 222, 5555
Ejemplos de números NO ondulados: 1987, 827, 827827, 1001, 955

Pues resulta que no me aclaro a como hacerlo.

Resulta que acabo de entrar en la universidad en el grado de informática y hemos dado los temas 1 y 2, los cuales no enseñan ni vectores, ni ninguna herramienta más allá de las simples operaciones, condiciones y bucles.

Entonces, ¿Cómo podría decir si un número es ondulado?. Hasta aquí lo que he podido hacer.

Código
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. int main()
  6. {
  7. int numero;
  8. int copiaNumero;
  9. int cifra, cifraAux;
  10. cin >> numero;
  11.  
  12. if ( numero < 100 )
  13. {
  14. cout << "RESULTADO = SI" << endl;
  15. }
  16. else
  17. {
  18. copiaNumero = numero;
  19.  
  20. while ( (copiaNumero / 10) != 0 )
  21. {
  22. // Guarda la cifra leida
  23. cifra = copiaNumero % 10;
  24. copiaNumero = copiaNumero / 10;
  25.  
  26.  
  27. //cifra = cifra * 10 + cifra;
  28.  
  29. /* HASTA AQUI */
  30.  
  31. }
  32. }
  33.  
  34. system( "pause" );
  35. return 0;
  36. }
  37.  

¿Alguien puede ayudarme? No pido que escribais el código, sólo pido una idea, un empujon para aclararme como podría hacerlo.

Gracias!

Código
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. int main()
  6. {
  7. int numero;
  8. int copiaNumero;
  9. int cifra1, cifra2;
  10. int numeroCifras;
  11. bool esOndulado = false;
  12. bool penultimaCifra = false, salida = false;
  13.  
  14. cin >> numero;
  15.  
  16. if ( numero < 100 )
  17. {
  18. cout << "RESULTADO = SI" << endl;
  19. return 0;
  20. }
  21. else
  22. {
  23. numeroCifras = 1;
  24. copiaNumero = numero;
  25.  
  26. while ( !salida )
  27. {
  28. if ( numeroCifras == 1 )
  29. {
  30. cifra1 = copiaNumero % 10;
  31. }
  32. else if ( numeroCifras == 2 )
  33. {
  34. cifra2 = copiaNumero % 10;
  35. }
  36. else
  37. {
  38. if ( numeroCifras % 2 == 0 )
  39. {
  40. if ( cifra2 == (copiaNumero%10) )
  41. esOndulado = true;
  42. else
  43. esOndulado = false;
  44. }
  45. else
  46. {
  47. if ( cifra1 == (copiaNumero%10) )
  48. esOndulado = true;
  49. else
  50. esOndulado = false;
  51. }
  52. }
  53.  
  54. copiaNumero = copiaNumero / 10;
  55. numeroCifras++;
  56.  
  57. if ( penultimaCifra )
  58. salida = true;
  59.  
  60. if ( copiaNumero / 10 == 0 )
  61. penultimaCifra = true;
  62.  
  63. }
  64. }
  65.  
  66. if ( esOndulado )
  67. cout << "Es ondulado" << endl;
  68. else
  69. cout << "No es ondulado" << endl;
  70.  
  71. system( "pause" );
  72. return 0;
  73. }
  74.  
  75.  

Ese es el código que final que he conseguido, funciona, aunque posiblemente se pueda hacer mas reducido.

Gracias!


« Última modificación: 15 Diciembre 2010, 01:36 am por Littlehorse » En línea

En las pistolas, fíjense, a cada disparo el cañon recula, como asustado por lo que acaba de hacer.
ace332

Desconectado Desconectado

Mensajes: 66


Ver Perfil
Re: [DUDA] Comprobar si un número es ondulado
« Respuesta #1 en: 15 Diciembre 2010, 01:57 am »

Código
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. int main(void)
  6. {
  7.  int n;
  8.  bool es_ondulado=true;
  9.  cin>>n;
  10.  if(n>=100)
  11.  {
  12.    int z=n,i=3;
  13.    const int ab[]={(z%100)/10,z%10};
  14.    z/=100;
  15.    while(z>0 && es_ondulado)
  16.    {
  17.      es_ondulado=((z%10)==ab[i%2]);
  18.      z/=10;
  19.      i++;
  20.    }
  21.  }
  22.  if(es_ondulado)
  23.    cout<<"ES ondulado\n";
  24.  else
  25.    cout<<"NO es ondulado\n";
  26.  return 0;
  27. }
  28.  


En línea

Kropt32

Desconectado Desconectado

Mensajes: 34


Ver Perfil
Re: [DUDA] Comprobar si un número es ondulado
« Respuesta #2 en: 15 Diciembre 2010, 09:04 am »

No existen los vectores.
En línea

En las pistolas, fíjense, a cada disparo el cañon recula, como asustado por lo que acaba de hacer.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Comprobar si un numero es entero
Programación Visual Basic
Neobius 6 33,583 Último mensaje 21 Abril 2006, 08:04 am
por Neobius
[RETO] Comprobar si un numero dado es un numero de la suerte « 1 2 ... 5 6 »
Programación Visual Basic
Karcrack 53 21,924 Último mensaje 17 Agosto 2010, 23:58 pm
por Dessa
[RETO] Comprobar si un numero es odioso « 1 2 »
Programación Visual Basic
Karcrack 17 11,327 Último mensaje 20 Agosto 2010, 16:42 pm
por Karcrack
[RETO] Comprobar si un numero es Oblongo/Pronico « 1 2 3 4 5 »
Programación Visual Basic
Karcrack 47 25,153 Último mensaje 18 Agosto 2010, 01:27 am
por Karcrack
[JSTL] Como comprobar si una variable es un numero en JSTL
Desarrollo Web
nhaalclkiemr 0 4,472 Último mensaje 10 Abril 2011, 20:42 pm
por nhaalclkiemr
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines