Cita:
Iniciado por anavic
Vaya hombre, este pensaba que tardaríais un poco más en sacarlo.
Efestiviwonder, es el único, el 381654729.
Todas las posibilidades eran ... todos los números formados por los dígitos del 1 al 9?
O sea...
9*8*7*6*5*4*3*2*1= 362.880 posibles combinaciones. Y mira que son muchas para un papel....
usando como regla que las posiciones 1, 3, 5, 7, y 9 por fuerza tienen que ser nones, ya que sólo tenemos 4 números pares y tienen que ser utilizados en las posiciones pares (2, 4, 6, 8). Si a eso le sumamos que la posición 5 tiene por fuerza que estar usada por el 5... sólo nos quedan...
4*4*3*3*1*2*2*1*1
O sea, 576 posibilidades.
Usé una hojita en xls para poner cada combinación, y después eliminar todas las opciones que no correspondían. Observé agradablemente como al llegar al 9, había 3 combinaciones que seguían la regla en cada divisor.
129654729
381654729
321654969
Pero al quitar los números que contenían dígitos repetidos... me he dado cuenta que sólo quedaba 1 posible solución.
Besotes.
|
uffff, yo como no tenia muchas ganas de pensar, me he hecho un pequeño y cutre pero efectivo algoritmo, que busca el numero ... , por si a alguien le interesa...
Código PHP:
void main()
{
bool Coke = true;
int num[8];
srand(time(NULL));
while(Coke) {
int t = 1 + rand()%9;
for(int e = 1 + rand()%9; e == t; e = 1 + rand()%9);
for(int g = 1 + rand()%9; g == t || g == e; g = 1 + rand()%9);
for(int y = 1 + rand()%9; y == g || y == e || y == t; y = 1 + rand()%9);
for(int s = 1 + rand()%9; s == y || s == g || s == e || s == t; s = 1 + rand()%9);
for(int b = 1 + rand()%9; b == s || b == y || b == g || b == e || b == t; b = 1 + rand()%9);
for(int n = 1 + rand()%9; n == b || n == s || n == y || n == g || n == e || n == t; n = 1 + rand()%9);
for(int z = 1 + rand()%9; z == n || z == b || z == s || z == y || z == g || z == e || z == t; z = 1 + rand()%9);
for(int m = 1 + rand()%9; m == z || m == n || m == b || m == s || m == y || m == g || m == e || m == t; m = 1 + rand()%9);
num[0] = t * 100000000 + e * 10000000 + g * 1000000 + y * 100000 + s * 10000 + b * 1000 + n * 100 + z * 10 + m;
int p = 9;
bool flag = false;
for(int i = 0; i < 8; i++) {
if(num[i]%p == 0) {
if(i == 7)
flag = true;
else {
num[i + 1] = num[i]/10;
p--;
}
}else
break;
}
if(flag) {
cout << "BINGO!!! se ha encontrado el numero "<<num[0]<<"\n"<<endl;
break;
}
}
system("pause");
}
Coke.
Última edición por Coke; 30/12/2005 a las 02:45.
|