Seguridad Wireless - Wifi

General => Programación => Mensaje iniciado por: skan en 12-12-2014, 22:54 (Viernes)

Título: Combinaciones de digitos repetidos... ??
Publicado por: skan en 12-12-2014, 22:54 (Viernes)
Buenas

Estaba leyendo un hilo sobre un generador de passwords... y me ha surgido una duda...

Entre todos los números de 10 digitos ¿Cómo calculas cuantos hay que tengan al menos 3 dígitos iguales consecutivos?
Parece fácil pero algunos se contarían varias veces, por ejemplo cuando tenga un grupo de 3 al principio y otro grupo de 3 en otro lugar.
Título: Re: Re: Combinaciones de digitos repetidos... ??
Publicado por: vk496 en 12-12-2014, 23:02 (Viernes)
Explicate mejor por favor, no comprendo la intención/finalidad de la pregunta.

Salu2
Título: Re: Combinaciones de digitos repetidos... ??
Publicado por: skan en 13-12-2014, 01:01 (Sábado)
La finalidad es sólo saber resolver un problemilla probabilistico, hacer ese cálculo,
saber como se calcula la cantidad de números distintos con al menos 3 digitos iguales consecutivos.

por ejemplo
37472345  -> ése no tiene 3 números iguales consecutivos
47772345  -> éste sí, porque tiene tres 7 seguidos.
77777345  -> éste también

Pues eso, contarlos.

En total hay 10^8 números, ¿Cuántos tienen al menos 3 digitos iguales seguidos?
Título: Re: Combinaciones de digitos repetidos... ??
Publicado por: vk496 en 13-12-2014, 01:10 (Sábado)
Es decir, de una lista de numeros, quieres saber cuantos de ellos tienen 3 números iguales consecutivos. Cierto?

Salu2
Título: Re: Combinaciones de digitos repetidos... ??
Publicado por: skan en 13-12-2014, 01:52 (Sábado)
3 o más.
Pero no hacerlo mediante un programa (aunque eso ayudaría a comprobarlo) que los cuente sino mediante un cálculo.

Por ejemplo aquí he visto una explicación pero no la entiendo ni sé si es correcta:
http://rinconmatematico.com/foros/index.php?topic=34705.new#new
Título: Re: Combinaciones de digitos repetidos... ??
Publicado por: Hwagm en 13-12-2014, 22:13 (Sábado)
a groso modo

como son 10 digitos, pues metes 10 for (blucles) de o a 9.

el ultimo for, metes la comprobacion, o hay mismo, o llamada a una funcion, para poder salir cuando se cumpla la comprobacion.

tienes los numeros parciales, en las variable de cada bucle.

Si el digito 1 = 2 = 3 sumas 1, y sales de la comprobacion
Si el digito 2 = 3 = 4 sumas 1, y sales de la comprobacion
Si el digito 3 = 4 = 5 sumas 1, y sales de la comprobacion
Si el digito 4 = 5 = 6 sumas 1, y sales de la comprobacion
Si el digito 5 = 6 = 7 sumas 1, y sales de la comprobacion
Si el digito 6 = 7 = 8 sumas 1, y sales de la comprobacion
Si el digito 7 = 8 = 9 sumas 1, y sales de la comprobacion
Si el digito 8 = 9 = 10 sumas 1, y sales de la comprobacion
Título: Re: Combinaciones de digitos repetidos... ??
Publicado por: Hwagm en 13-12-2014, 22:33 (Sábado)
Código: [Seleccionar]
int i0,i1,i2,i3,i4,i5,i6,i7,i8,i9,i10, suma;

// si quieres ponlas a cero, aunque no hace falta

for(i0=0;i0<10;i0++){
for(i1=0;i1<10;i1++){
for(i2=0;i2<10;i2++){
for(i3=0;i3<10;i3++){
for(i4=0;i4<10;i4++){   //    cin>>suma, puedes poner visualizaciones por aqui si quieres
for(i5=0;i5<10;i5++){
for(i6=0;i6<10;i6++){
for(i7=0;i7<10;i7++){  //  cin>>suma, puedes poner visualizaciones por aqui si quieres
for(i8=0;i8<10;i8++){
for(i9=0;i9<10;i9++){
for(i10=0;i10<10;i10++){

 cin>>suma; // para ver sumas parciales , si va muy rapido, pues lo pones en los fors

 if (i0==i1 && i1==i2 && i2==i3)  {
                        suma++;
                        break;
                                                      }

 if (i1==i2 && i2==i3 && i3==i4)  {
                        suma++;
                        break;
                                                      }
if (i2==i3 && i3==i4 && i4==i5)  {
                        suma++;
                        break;
                                                      }
if (i3==i4 && i4==i5 && i5==i6)  {
                        suma++;
                        break;
                                                      }
if (i4==i5 && i5==i6 && i6==i7)  {
                        suma++;
                        break;
                                                      }
if (i5==i6 && i6==i7 && i7==i8)  {
                        suma++;
                        break;
                                                      }
if (i6==i7 && i7==i8 && i8==i9)  {
                        suma++;
                        break;
                                                      }
if (i7==i8 && i8==i9 && i9==i10)  {
                        suma++;
                        break;
                                                      }



}
}
}
}
}
}
}
}
}
}
 cin>>suma; // asi veras la suma final
Título: Re: Combinaciones de digitos repetidos... ??
Publicado por: Hwagm en 13-12-2014, 22:34 (Sábado)
asi lo haria yo xd


y no me he leido el link, asi que alo mejor es super disitinto xd, pero yo aprendi a programar a base de ostias xd
Título: Re: Combinaciones de digitos repetidos... ??
Publicado por: skan en 13-12-2014, 23:14 (Sábado)
Muchas gracias pero insisto, lo que preguntaba no era por un código que lo calcule sino por como deducir la ecuación matemática.

De todos modos, ya que habéis puesto el código, ¿no hay una forma más compacta, sin tantos bucles?
Título: Re: Combinaciones de digitos repetidos... ??
Publicado por: vk496 en 13-12-2014, 23:50 (Sábado)
yo aprendi a programar a base de ostias xd

Creo que no fueron suficientes  >:D ;D

Si eso lo ve geminis, le da algo xD

Dejo una cosa mal hecha en Bash. Mete 10 numero como parametro y obtendrás una respuesta

Código: [Seleccionar]
#!/bin/bash

numero="$1"

if [ ! ${#numero} = 10 ]; then
echo este numero no es de 10 cifras
exit 1
fi

contenedor=$(echo "$numero" | cut -c1)
contador=0

for x in $(seq 1 10); do
actual=$(echo "$numero" | cut -c$x)
echo actual: $actual


if [ $contenedor = $actual ]; then
let contador=$contador+1
echo " contenedor: $contenedor"


if [ $contador = 3 ]; then
echo hay 3 numeros
exit
fi

else
contenedor=$actual
contador=1
fi

done

Salu2
Título: Re: Combinaciones de digitos repetidos... ??
Publicado por: raphik en 31-01-2015, 13:11 (Sábado)
La finalidad es sólo saber resolver un problemilla probabilistico, hacer ese cálculo,
saber como se calcula la cantidad de números distintos con al menos 3 digitos iguales consecutivos.

por ejemplo
37472345  -> ése no tiene 3 números iguales consecutivos
47772345  -> éste sí, porque tiene tres 7 seguidos.
77777345  -> éste también

Pues eso, contarlos.

En total hay 10^8 números, ¿Cuántos tienen al menos 3 digitos iguales seguidos?


Para un número de diez cifras
d9 d8 d7 d6 d5 d4 d3 d2 d1 d0

hay ocho posibles casos

d9=d8=d7≠d6≠d5≠d4≠d3≠d2≠d1≠d0

d9≠d8=d7=d6≠d5≠d4≠d3≠d2≠d1≠d0

d9≠d8≠d7=d6=d5≠d4≠d3≠d2≠d1≠d0

d9≠d8≠d7≠d6=d5=d4≠d3≠d2≠d1≠d0

d9≠d8≠d7≠d6≠d5=d4=d3≠d2≠d1≠d0

d9≠d8≠d7≠d6≠d5≠d4=d3=d2≠d1≠d0

d9≠d8≠d7≠d6≠d5≠d4≠d3=d2=d1≠d0

d9≠d8≠d7≠d6≠d5≠d4≠d3≠d2=d1=d0

Si las cifras son decimales habría 8 · 108 combinaciones distintas.
Saludos.