Yo tenía una pregunta de la entrevista hace un par de días que involucran el cálculo de la cantidad de pesada entre los números en un rango dado. Se me ocurrió una solución básica, que fue para iterar a través de toda la gama y de la prueba para la pesadez de cada número. Me di cuenta de inmediato que se trata de una terriblemente ineficiente método de resolución del problema. En el interés de educar a mí mismo me han abordar el problema de hoy para intentar aprender más acerca de este tipo de problema. Es difícil para mí, porque yo no tengo una super fuerte de matemáticas, pero estoy tratando de aprender.
Básicamente, el problema va como esto:
Tomar cualquiera de los 2 números de 0 a 200,000,000. En ese rango, calcular el número de "heavy números". Este se calcula sumando todos los componentes dígitos y luego dividiendo por el número de componentes. Si el promedio es mayor que 7, el número se considera pesado.
Ejemplo:
1234: 1+2+3+4/4 = 2.5 (not heavy)
8996: 8+9+9+6/4 = 8 (heavy)
Así que, dado que el rango de 1002 - 12089, mi enfoque ingenuo es iterar sobre cada número entre y calcular su peso. Este enfoque rápidamente se cae a pedazos cuando se trata con muy gran número de rangos.
He hecho un poco de búsqueda a través de Google y Bing y más allá de un par de puestos donde la gente tiene copia/pega literal de la pregunta, me parece que casi no hay información sobre este tipo de problema. Sospecho que este tipo de problema se llama algo distinto de la "pesada números" pero estoy en una pérdida en cuanto a lo que la terminología es.
Aquí hay un enlace a una de esas discusiones: http://groups.google.com/group/algogeeks/browse_thread/thread/a1b824107afe3801
Tengo la esperanza de que alguien que esté familiarizado con el tipo de escenario puede explicar formas alternativas para resolver el problema de una manera simple, y que yo podría hacer preguntas de seguimiento hasta que yo entiendo.
Gracias por la lectura.