Había una pregunta en una competencia de matemáticas a la que asistí el año pasado. Al final de la competencia, me di cuenta de que mi respuesta fue incorrecta de la pregunta de abajo y nunca he sido capaz de averiguar cómo resolverlo.
Aquí está la pregunta:
Se le pide a generar de 10 dígitos de cadenas utilizando los dígitos de 0 a 9 una vez cada uno. Cualquiera de los cuatro dígitos de la subcadena se utiliza en una cadena que no puede ser utilizado de nuevo.
¿Cuál es el mayor número de cadenas de caracteres que puede generar el uso de estas reglas? (y necesito la lista de ellos)
Ejemplo:
Si utiliza una cadena 0243697518 en su lista, usted puede no generar cadenas contienen 0243, 2436, 4369, 3697, 6975, 9751 y 7518
Para resolver el problema, he escrito un programa de c++, simplemente analizar todos los permutación de "0123456789" y añadirlos a una lista de solución si 4 dígitos sub-cadenas de que el código no ha sido usado antes. Pero el problema de mi algoritmo es que el tamaño de la lista de solución varía dependiendo de su punto de partida que se agrega a la lista en primer lugar. Si empiezo a añadir en la lista de "0123456789", lista termina con 504 entradas que no es el máximo preguntó. Realmente me pregunto cómo resolver esta cuestión, cualquier ayuda muy apreciada. Estoy abierto a escuchar su solución matemática o de cualquier algoritmo de sugerencias para generar la lista de pedido.
Histograma de random como sugiere Pedro (min: 575, max: 606):
Por encima de algoritmo intenta generar la lista de pedido mediante el escaneo de todos los posibles de 10 dígitos de cadenas de caracteres en una secuencia aleatoria. Histograma generado más de 100 mil ensayos. Porque todos los posibles 10 cadenas de dígitos necesarios para ser analizados para cada una de las iteraciones son de 10! = 3,6 millones, cada una de las iteraciones tarda 10 segundos en mi pc para completar. Yo podría intentar optimizar mi algoritmo más si yo creía que no había realmente ninguna determinista solución para la cuestión.