[DUDA] Comprobar si un número es ondulado

Iniciado por Kropt32, 15 Diciembre 2010, 00:22 AM

0 Miembros y 1 Visitante están viendo este tema.

Kropt32

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 (cpp) [Seleccionar]

#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 (cpp) [Seleccionar]

#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!
En las pistolas, fíjense, a cada disparo el cañon recula, como asustado por lo que acaba de hacer.

ace332

Código (cpp) [Seleccionar]

#include <iostream>

using namespace std;

int main(void)
{
 int n;
 bool es_ondulado=true;
 cin>>n;
 if(n>=100)
 {
   int z=n,i=3;
   const int ab[]={(z%100)/10,z%10};
   z/=100;
   while(z>0 && es_ondulado)
   {
     es_ondulado=((z%10)==ab[i%2]);
     z/=10;
     i++;
   }
 }
 if(es_ondulado)
   cout<<"ES ondulado\n";
 else
   cout<<"NO es ondulado\n";
 return 0;
}

Kropt32

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