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.
#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!
#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!
#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;
}
No existen los vectores.