¿Cuál es el algoritmo para encontrar todas las soluciones de hacer 100 de 1-2-3-4-5-6-7-8-9 en orden?

Es un ejemplo clásico de libros de recursión (simple) .

(Sin embargo, no hay heurística de poda para permitir el rechazo temprano de candidatos no válidos, ya que debido a todas las operaciones, por ejemplo, /,% y √ (y operaciones booleanas como | & ^ y operaciones de C como ~ no se puede saber si algo es demasiado alto) / demasiado bajo / no divisible.

Entonces, para dar una estimación aproximada, si hay operadores binarios B (¡descuide operadores unarios como √ ~!), Y tenemos que elegir uno de esos para conectar los dígitos N = 9 estrictamente en orden con los operadores N-1, debemos evaluar todos (N-1) ^ B candidatos . Entonces para + – * /% eso ya es 8 ^ 5 = 2 ^ 15 candidatos.

Si permite paréntesis en dos o más términos adyacentes, hay exponencialmente más opciones. No puedo enumerarlos en la parte superior de mi cabeza, pero digamos que hay términos T.

Y luego, si considera que hay U operadores unarios (por ejemplo, √ ~! Y tal vez operadores de reducciones unarias como ^ & |), y si estimamos asumiendo que cada uno de los términos T (es decir, número o subexpresión entre paréntesis) puede tener opcionalmente uno de esos operadores U aplicado una vez, esto multiplica el número de candidatos por un factor adicional T * U

  1. 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 * 9 = 100
  2. 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 * 9
    1 + 2 + 3-4 * 5 + 6 * 7 + 8 * 9
    1 + 2-3 * 4 + 5 * 6 + 7 + 8 * 9
    1 + 2-3 * 4-5 + 6 * 7 + 8 * 9
    1 + 2 * 3 + 4 * 5-6 + 7 + 8 * 9
    1 + 2 * 3 * 4 * 5/6 + 7 + 8 * 9
    1-2 + 3 * 4 * 5 + 6 * 7 + 8-9
    1-2 + 3 * 4 * 5-6 + 7 * 8-9
    1-2 * 3 + 4 * 5 + 6 + 7 + 8 * 9
    1-2 * 3-4 + 5 * 6 + 7 + 8 * 9
    1-2 * 3-4-5 + 6 * 7 + 8 * 9
    1 * 2 * 3 + 4 + 5 + 6 + 7 + 8 * 9
    1 * 2 * 3-4 * 5 + 6 * 7 + 8 * 9
    1 * 2 * 3 * 4 + 5 + 6 + 7 * 8 + 9
    1 * 2 * 3 * 4 + 5 + 6-7 + 8 * 9

3. Para obtener más fuerza bruta
es decir; La fuerza bruta es el algoritmo requerido
@ Rompecabezas matemáticos: ¿Puedes hacer 100 de los dígitos 1,2,3,4,5,6,7,8,9, en orden?

El conjunto de cadenas que tienen 1 … 9 en orden y que también son expresiones aritméticas válidas es un conjunto recursivo. Esto significa que puede ser generado por una computadora.
OK encienda la computadora y para cada cadena generada, evalúela. Si resulta ser 100, imprímalo, de lo contrario, sáltelo y pase a la siguiente cadena ok kosher 1 … 9.

Le garantizo que esta máquina imprimirá toda la expresión que está buscando.

Dudo mucho que haya una solución elegante para esto. Simplemente hay demasiadas operaciones posibles (+, -, /, *, raíz cuadrada, potencias, registros, límites, trig, etc.) para combinarlas en un algoritmo.

Estoy de acuerdo con Ashwath en que la fuerza bruta sería la mejor, si no la única, forma de hacerlo.

Los algoritmos de fuerza bruta funcionarán mejor ya que el conjunto de problemas es pequeño. Simplemente calcule para cada número 1,2,3..9 recursivamente hasta que obtenga todas las soluciones.

Como ejemplo,

1 * 2 * 3 * 4 + 5 + 6 + 7 * 8 + 9 = 100.