Usted puede fácilmente este programa, con el siguiente algoritmo:
Paso 1: Dividir un entero dado de n dígitos 2 dígitos-secuencias mediante la visualización de la primera $ 0 \leq i \leq n-1$ como la primera secuencia(puede ser una secuencia vacía) y la próxima $n-i$ dígitos a ser la segunda secuencia. De esta forma disponemos de n diferentes divisiones.
Paso 2: Verificar que se divide son 'buenos' se divide. Bueno divide se divide de tal manera que, no es un número entero que termina con una secuencia de 1 y un entero comenzando con la secuencia 2. En el 2012 caso, tenemos 4 posibles (diferentes) divisiones:
- () , (2012)
- (2), (012)
- (20), (12)
- (201), (2)
En este caso todos pero el segundo son buenas divisiones, porque no hay entero que comienza con los dígitos 012.
Paso 3: Después de filtrar, buscar a los que son buenos se divide y calcular cuando aparecen. Y la respuesta a la pregunta es el mínimo de todos estos valores.
El cálculo de la apariencia se hace así:
Dado un split (ab)(cdefg), calcular el mínimo entero $d$ tales que d comienza con (cdefg) y termina con (ab+1). Si $a \neq g$ es el entero $cdefgab+1$ por ejemplo. Entonces el dígito donde esta entero ocurre es $9*1+90*2+900*3+900*4+9000*5+90000*6+(cdefgab+1-10^6)*7+1-2$ en nuestro caso. Las primeras 6 condiciones que existen porque nuestro número entero es mayor de 10*6, así que todos esos números enteros llegado antes que él. Luego hay $cdefgab+1-10^6$ enteros delante de él con 7 dígitos. Así que este entero debería comenzar en el siguiente lugar (+1 parte), pero desde que desee $abcdefg$, podemos restar 2 lugares, porque esta nueva entero comienza 2 lugares anteriores.