Sumas y productos de dígitos
El enunciado de un problema 3 de la Fase Local de la Olimpiada Matemática Española del
2000 es
¿Cuántos números, comprendidos entre 1.000 y 9.999, verifican que la suma de sus cuatro dígitos es mayor o igual que el producto de los mismos? ¿Para cuántos de ellos se verifica la igualdad?
Definir las funciones
1 2 |
conMayorSumaQueProducto :: Int -> Int -> [Int] conIgualSumaQueProducto :: Int -> Int -> [Int] |
tales que
- (conMayorSumaQueProducto a b) es la lista de los números del intervalo [a,b] tales que la suma de sus dígitos es mayor que el producto de los mismos. Por ejemplo,
1 2 3 4 5 6 |
λ> conMayorSumaQueProducto 20 99 [20,21,30,31,40,41,50,51,60,61,70,71,80,81,90,91] λ> conMayorSumaQueProducto 120 199 [120,121,122,130,131,140,141,150,151,160,161,170,171,180,181,190,191] λ> conMayorSumaQueProducto 220 299 [220,221,230,240,250,260,270,280,290] |
- (conIgualSumaQueProducto a b) es la lista de los números del intervalo [a,b] tales que la suma de sus dígitos es igual que el producto de los mismos. Por ejemplo,
1 2 3 4 |
λ> conIgualSumaQueProducto 10 99 [22] λ> conIgualSumaQueProducto 100 999 [123,132,213,231,312,321] |
Usando las funciones anteriores, calcular las respuestas a las preguntas del problema de la Olimpiada.
Soluciones
[schedule on=’2021-05-27′ at=»06:00″]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
conMayorSumaQueProducto :: Int -> Int -> [Int] conMayorSumaQueProducto a b = [x | x <- [a..b], let xs = digitos x, sum xs > product xs] conIgualSumaQueProducto :: Int -> Int -> [Int] conIgualSumaQueProducto a b = [x | x <- [a..b], let xs = digitos x, sum xs == product xs] -- (digitos n) es la lista de los dígitos de n. Por ejemplo, -- digitos 325 == [3,2,5] digitos :: Int -> [Int] digitos a = [read [c] | c <-show a] -- Cálculo de las respuestas -- ========================= -- La cantidad de números, comprendidos entre 1.000 y 9.999, tales -- que la suma de sus cuatro dígitos es mayor o igual que el producto de -- los mismos se calcula con -- λ> length (conMayorSumaQueProducto 1000 9999 ++ conIgualSumaQueProducto 1000 9999) -- 2502 -- Por tanto, hay 2502 números que cumplen la primera condición. -- La cantidad de números, comprendidos entre 1.000 y 9.999, tales -- que la suma de sus cuatro dígitos es igual que el producto de los -- mismos se calcula con -- λ> length (conIgualSumaQueProducto 1000 9999) -- 12 -- Por tanto, hay 12 números que cumplen la segunda condición. La lista -- de dichos números se puede calcular con -- λ> conIgualSumaQueProducto 1000 9999 -- [1124,1142,1214,1241,1412,1421,2114,2141,2411,4112,4121,4211] |
Nuevas soluciones
- En los comentarios se pueden escribir nuevas soluciones.
- El código se debe escribir entre una línea con <pre lang="haskell"> y otra con </pre>
2 Comentarios