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
#include <iostream> using namespace std; int main() { int numero; int copiaNumero; int cifra, cifraAux; cin >> numero; if ( numero < 100 ) { cout << "RESULTADO = SI" << endl; } else { copiaNumero = numero; while ( (copiaNumero / 10) != 0 ) { // Guarda la cifra leida cifra = copiaNumero % 10; copiaNumero = copiaNumero / 10; //cifra = cifra * 10 + cifra; /* HASTA AQUI */ } } system( "pause" ); return 0; }
¿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
#include <iostream> using namespace std; int main() { int numero; int copiaNumero; int cifra1, cifra2; int numeroCifras; bool esOndulado = false; bool penultimaCifra = false, salida = false; cin >> numero; if ( numero < 100 ) { cout << "RESULTADO = SI" << endl; return 0; } else { numeroCifras = 1; copiaNumero = numero; while ( !salida ) { if ( numeroCifras == 1 ) { cifra1 = copiaNumero % 10; } else if ( numeroCifras == 2 ) { cifra2 = copiaNumero % 10; } else { if ( numeroCifras % 2 == 0 ) { if ( cifra2 == (copiaNumero%10) ) esOndulado = true; else esOndulado = false; } else { if ( cifra1 == (copiaNumero%10) ) esOndulado = true; else esOndulado = false; } } copiaNumero = copiaNumero / 10; numeroCifras++; if ( penultimaCifra ) salida = true; if ( copiaNumero / 10 == 0 ) penultimaCifra = true; } } if ( esOndulado ) cout << "Es ondulado" << endl; else cout << "No es ondulado" << endl; system( "pause" ); return 0; }
Ese es el código que final que he conseguido, funciona, aunque posiblemente se pueda hacer mas reducido.
Gracias!