Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: Kropt32 en 15 Diciembre 2010, 00:22 AM

Título: [DUDA] Comprobar si un número es ondulado
Publicado por: Kropt32 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 (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!
Título: Re: [DUDA] Comprobar si un número es ondulado
Publicado por: ace332 en 15 Diciembre 2010, 01:57 AM
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;
}
Título: Re: [DUDA] Comprobar si un número es ondulado
Publicado por: Kropt32 en 15 Diciembre 2010, 09:04 AM
No existen los vectores.