Conjuntos millonarios II

martes, 28 de junio de 2005

Estamos un poco aburridos. Agarramos un cuaderno y escribimos todos los números entre el 1 y 1000000 ambos inclusive.

  • ¿Cuántos ceros escribimos?

  • ¿Cuántos dí­gitos escribimos en total?

  • ¿Cuánto suman todos los dí­gitos escritos?

Y ya que estamos: ¿Cuántas páginas tiene el cuaderno? (Hagan las suposiciones que crean convenientes)

La tercer pregunta fue formulada hace muchos años por Juan Pablo. La solución no requiere cálculos tediosos ni el uso de una computadora. Solo hace falta una idea feliz

30 comentarios:

c_u_m_i_c... dijo...

Contestaré a la segunda pregunta. Tenemos 9 números de un solo dígito, 90 números de dos dígitos, 900 números de tres dígitos, etc... Así:

1*9 + 2*90 + 3*900 + 4*9000 + 5*90000 + 6*900000 + 7*1 = 5.888.896 dígitos

c_u_m_i_c... dijo...

Siguiendo el mismo razonamiento, la primera pregunta:

1*9 + 2*9 + 3*9 + 4*9 + 5*9 + 6*1 = 141 ceros

Que, lógicamente está incompleto, porque solo hemos contado los ceros que están 'pegados' a la derecha, del tipo 30000, pero no hemos contado los que están entre medias, del tipo 8051.

De tres cifras (tipo X0X): 9*9

De cuatro cifras:
- tipo XX0X: 9*9*9
- tipo X0XX: 9*9*9
- tipo X00X: 9*9

De cinco cifras:
- un cero (3 formas diferentes de colocar el cero): 3*9*9*9*9
- dos ceros (3 formas): 3*9*9*9
- tres ceros: 9*9

De seis cifras:
- un cero (4 formas): 4*9*9*9*9*9
- dos ceros (6 formas): 6*9*9*9*9
- tres ceros (4 formas): 4*9*9*9
- cuatro ceros: 9*9

Sumando todo esto, quedan 302271 ceros, aunque probablemente me haya equivocado con las cuentas ;)

c_u_m_i_c... dijo...

Para calcular el sumatorio de los dígitos voy a sumar unidades con unidades, decenas con decenas, etc... y luego los sumaré todo junto.

El razonamiento para sumar todas las unidades es el siguiente: siempre se repetirá la misma secuencia: 1, 2, 3, ..., 8, 9, 0, 1, 2... Es claro que la suma de las unidades será un múltiplo de 1+2+3+...+8+9+0 = 45 Y esta secuencia de diez dígitos, como tenemos 1.000.000 de números, se repetirá 1.000.000/10 = 100.000 veces. Así, la suma de las unidades será 45*100.000 = 4.500.000

Las decenas y siguientes es un poco más complicado, pero sigue la misma lógica. En este caso la secuencia será: diez ceros, diez unos, diez doses, ... , diez ochos, diez nueves. Esta secuencia de 100 números, se repetirá 1.000.000/100 = 10.000 veces. La suma de está secuencia será: 10*1 + 10*2 + 10*3 + ... + 10*9 = 10 * (1 + 2 + 3 + ... + 9 ) = 10 * 45 = 450 Multiplicando el total, queda 10.000 * 450 = 4.500.000

Como vemos para las centenas, unidades de millar, decenas de millar y centenas de millar, se repetirán las mismas cuentas, ya que el razonamiento es análogo.

Por tanto, la suma de todos los dígitos será:

6 * 4.500.000 + 1 (el uno es el de un millón) = 27.000.001

Jeje, lo de las páginas ya no hago la cuenta, pero sería calcular cuántos números caben en una página...

c_u_m_i_c... dijo...

Por cierto, Markelo, ¿por qué tienes una licencia Copyright?

Los términos que especificas en la parte inferior de la página son los mismos que una licencia Creative Commons by. El enlace a la licencia, son 5 líneas para leer.

RealHomero dijo...

Para calcular la suma de los digitos tengo una forma más simple...

1+1000000 suman 1000001
2+ 999999 suman 1000001
3+ 999998 suman 1000001

y así podría escribir 500000 sumas... (cuántas páginas de sumas tendría?? Markelo publicaría un post tan largo??)

Resumiendo, tenemos 500000*1000001=500000500000

homero dijo...

RealHomero, esa no es la suma de los dígitos, es la suma de los números...

Ésta es la forma corta que se me ocurrió para calcular la pregunta 3:

Escribimos los números del 0 al 999999, rellenando con ceros a la izquierda para que todos los números tengan seis cifras, de la siguiente manera:

000000, 000001, 000002, ... , 999998, 999999.

Si sumamos los dígitos de esta sucesión podemos observar que cada dígito aparece la misma cantidad de veces en la suma. De esta forma, de los 6*1.000.000 = 6.000.000 dígitos, un décimo (600.000) de ellos serán ceros, un décimo unos, y así. Por lo tanto, la suma de los dígitos será:

1*600.000 + 2*600.000 + ... + 9*600.000

Que es igual a:

600.000*(1+2+...+9) = 600.000*45 = 27000000

Si a esta suma se le agrega la suma de los digitos de 1.000.000, que es 1, se obtiene la suma que se pide (ya que el cero inicial y los ceros a la izquierda no alteran el resultado), por lo tanto:

Suma de los dígitos: 27000001

Es posible que haya algún errorcillo de cálculo por ahí, pero me parece que el razonamiento sirve. Claro que también es probable que haya alguna forma aún más fácil de obtener esta suma...

Markelo dijo...

La respuesta a la tercer pregunta ya la dieron Cumic (¡Bien vuelto!) y Homero (¿El irreal?), pero la idea luminosa que yo conocía es la que dió Homero (¿el real?)

Agrupamos los números en pares de la siguiente manera:

0 999999
1 999998
2 999997
...
...
499999 500000

Cada pareja suma 54.
Tenemos 500000 parejas... etc, etc.

Está bueno. ¿no?

Markelo dijo...

¿Solamente Cumic se animó con las dos primeras preguntas?

Por lo menos uno más que confirme los resultados.

¿Y el tamaño del cuaderno?

Les propongo las siguentes suposiciones:
Tomen un procesador de texto (como el word)
Configuren la página tamaño A4 con 2 cm de margen para cada lado
Seleccionen la letra Courier New (u otra de paso fijo) en tamaño 10.

Ahora si. ¿Cuantas páginas ocupan los números entre el 1 y el 1000000?

Recuerden que hay que dejar un espacio entre número y número.

Lorena dijo...

Con esas suposiciones, cada página contiene 5280 caracteres (dígitos y espacios).
Según c_u_m_i_c... se escriben 5888896 caracteres, que sumados a los 999999 espacios en blanco entre números, hacen 6888895 caracteres. Esto requiere más de 1304 páginas.
En cada página pueden quedar libres algunos espacios, por no poder éscribir todas las cifras del número correspondiente. En el peor de los casos se desperdician en promedio 5 espacios en cada hoja, que serian en total 6520 espacios, que es un poquito mas de una página.
Entonces, cuando esté aburrida me compro 1305 hojas A4 y me pongo a escribir.

manuel dijo...

ya estoy por dar con la respuesta escribi todos los numeros en cuaderno y ya nadamas estoy contando espren dos dias mas

manuel dijo...

no se crean no soy tan bruto pero concuredo con cumic

ervr dijo...

Para ver la cantidad de ceros escritos del 1 al 1.000.000 se me ocurrió atacarlo de la siguiente forma:
1 al 10 = 1 cero
1 al 100 = 11 ceros (9 de cada décima + 2 del cien)
1 al 1000 = 111 ceros (11*10, 10 centenas, + 1 cero del mil)
Y así sucesivamente
1 al 1.000.000 = 111.111 ceros

Será correcto eso?

Markelo dijo...

Me temo que no.
Fijate cuantos ceros hay del 1 al 100 que es fácil contarlos a mano.

Markelo dijo...

Manuel:

De tu frase me llamó la atención lo siguiente:

"espren dos dias mas"

¿Dos días?
Esta sería una buena pregunta:
¿Cuantos días demoraríamos en escribir los números entre el 1 y 1000000?

Supongamos... 3 dígitos por segundo por ejemplo (a menos que haya un dactilógrafo en la sala)

O podemos hacer la pregunta al revés.
¿A que velocidad hay que escribir para demorar dos días?

Cros dijo...

Se me ocurre otra forma de responder a la tercera pregunta:

Observemos la serie (n,s) donde n es cada numero desde el 1, y s es lo que suman los numeros de 1 a n:

(1,1) (2,3) (3,6) (4,10) (5,15) (6,21)(7,28) (8,36) (9,45) (10,55)...

Por inducción se extrae la siguiente regla: s= (n*n/2) + n/2


Aplicanola para 1000000

s=1000000*500000 + 500000 =500000500000


Un saludo!

(por cierto, llevo tiempo leyéndoos pero es la primera vez que escribo aquí. Enhorabuena por el site, Markelo)

Cros dijo...

Jejejeje sin darme cuenta he llegado a la vieja fórmula del sumatorio de n que nos enseñaron en la facultad:

S= n*(n+1)/2

ervr dijo...

Ciertamente esta mal el razonamiento que hice, la respuesta correcta es que de 1 a 1.000.000 hay 488.895, no lo hice con ningún razonamiento lógico sino con un programita en Basic, ya se que no es la idea de resolver los problemas pero me quedo la curiosidad

ceros = 0
For i = 1 To 1000000
texto = CStr(i)
If InStr(texto, "0") Then
For j = 1 To Len(texto)
letra = Mid(texto, j, 1)
If letra = "0" Then
ceros = ceros + 1
End If
Next
End If
Next

Agustín dijo...

Exactamente... pero exactamente...

Son necesarias 1397 páginas

(Tamaño A4 con márgenes de 2 cm (arriba, abajo, izquierda y derecha), con una fuente Courier New de tamaño 10)

La última página sólo contiene 9 líneas.

Agustín dijo...

Bueno, también se puede agregar que cada página contiene 64 líneas.

Cada línea puede tener 80 caracteres (esto es los dígitos más los espacios en blanco)

Pero los números no se pueden cortar, por lo tanto, si no entran en la línea pasan a la siguiente.

Entonces entran los primeros 30 números en la primera fila (51 dígitos + 29 espacios = 80 caracteres)

En la segunda línea entran del 31 al 57 (27 números x 2 dígitos = 54 dígitos... 54 dígitos + 26 espacios = 80 caracteres)

Bueno, así... y así... y así...

Al final queda más o menos así:

64 x 1396 = 89344 líneas. (Sin contar la página incompleta)

89344 + 9 = 89353 líneas (Sumando las nueve líneas de la última página)

Agustín dijo...

Una forma sencilla es la siguiente:

80 columnas x 64 líneas = 5120 caracteres

Sabemos que hay 5888896 dígitos, y 999999 espacios en blanco. Por lo que hay 6888895 caracteres.

6888895 / 5120 = 1345,4873 páginas

Este método es más sencillo, pero no considera que los números no deben cortarse cuando hay un salto de línea...

Javier dijo...

Estoy viendo que las respuestas de cantidad de ceros, cantidad de digitos y la suma de los mismos es, matematicamente, medible.
Pero, lamento decir que cuntas hojas ocuparian en un cuaderno, no.
Cuaderno: Conjunto de algunos pliegos de papel, doblados y cosidos (engrampados o pegados) en forma de libro...
Partiendo de la base que el cuaderno, para ser tal debe estar confeccionado con anterioridad, dificilmente podriamos escribirlo con "Courier New de tamaño 10" o cualquier otro formato computarizado. Pero suponiendo que la tecnologia o nuestro ingenio lo permitieran, todo dependeria del escribiente. Yo no escribo nada con una tipografía menor a 12. Y seguro encontrariamos quienes no posean computadora y lo quisieran hacer manuscrito (todavia existe esa forma de escibir), por lo que dependeria del tamaño de sus numeros y espacios. Y si el escribiente (con computadora o no) decidiera escribir los numeros con letra?... uno, dos, tres, cuatro, etc. seguramente ocuparía mayor espacio... quien dijo que escribiendo así los ceros y los digitos no son contables?
y sumables? yo se si sumo "uno mas uno me da como resultado dos" y podría seguir...
Bueno, despues de este humilde aporte (solo para demostrar que no todo es matemático y medible), me despido. Muy contento de haber encontrado este lugar gracias al post siete pecados capitales...

hernán dijo...

leí la respuesta de manuel y su razonamiento es erroneo... bien
del 1 al 100 hay 11 ceros
al 900 hay 99 ceros
al 1000 hay 99+1 (que es el 1000)

y así sucesivamente

hasta que al 1.000.000 hay 72991 ceros

Markelo dijo...

En este problema dieron varias respuestas, todas distintas.

Me resisto a poner cuál es la respuesta correcta; más en este tipo de acertijos donde no hay equívocos y es solo cuestión de hacer las cuentas.

Les comento otro método más con el que pueden intentar resolverlo:

Dejemos para el final al 1000000. Con el resto, completemos con ceros a la izquierda para tener todos los números de la siguiente manera:

000000
000001
000002
...
...
999998
999999

Tenemos así un millón de números con un total de 6 millones de dígitos, de los cuales, el diez por ciento (600000) son ceros.

Ahora solo nos queda restar los ceros a la izquierda.

Tenemos un número de seis ceros (6x1), más nueve con cinco ceros (9x5) más 90 con cuatro ceros (90x4) etc. etc.

De esta manera, pueden responder las dos primeras preguntas.

Y las respuestas son...

Agustín dijo...

Siguiendo los pasos de Markelo, que son correctos:

del 1 al 9 hay 9 números con 5 ceros
del 10 al 99 hay 90 números con 4 ceros
del 100 al 999 hay 900 números con 3 ceros
del 1000 al 9999 hay 9000 números con 2 ceros
del 10000 al 99999 hay 90000 números con 1 cero

(5x9) + (4x90) + (3x900) + (2x9000) + (1x90000) = 111105

600000 - 111105 = 488895 ceros (total)

Después se puede deducir que habrá 600000 nueves, ochos, sietes, seis, cincos, cuatros, tres y dos... y habrá 600001 unos...

Entonces:

(600000 x 8) + 600001 + 488895 = 5888896 dígitos

Agustín dijo...

Me olvidaba... con respecto a la otra pregunta que formuló Markelo sobre el tiempo empleado para escribir todos esos dígitos...

Para hacerlo en 2 días, deberíamos poder escribir 34,0792... dígitos por segundo...

Si pudiésemos escribir a razón de 3 dígitos por segundo tardaríamos 1363 días, 4 horas, 5 minutos y 20 segundos.

Agustín dijo...

Ufff... me equivoqué... lo hice con 3 dígitos por minuto

A razón de 3 dígitos por segundo se tardaría 22 días, 17 horas, 16 minutos, 5 1/3 segundos.

Markelo dijo...

Ok Agustín.

Un solo detalle (que no varía la solución, pero lo digo solo para que quede más claro)

Para tener 6000000 de dígitos, debemos contar entre 000000 y 999999. Por eso, para restar la cantidad de ceros a la izquierda hay que contar los seis ceros de 000000 y restarlos.
De todos modos, como después hay que sumar los seis ceros de 1000000, el resultado es el mismo.

con respecto al tiempo, tu resultado es correcto... si escribimos manuscrito (donde los espacios no insumen tiempo) pero si los escribimos en la compu, hay que agregar 999999 teclasos a la barra espaciadora. (un poquito más de tiempo :-)

Luisito dijo...

Private Sub Command1_Click()
Dim cuenta As Double
Dim i As Double
Dim nro As Integer
Dim cadena As String
If cadena = "" Then cadena = "0"
linea1:
For i = 0 To 1000000
If InStr(Str(i), cadena) > 0 Then
cuenta = cuenta + 1
Else
End If
Next i
Print nro & "-" & cuenta
cuenta = 0
nro = nro + 1
cadena = Str(nro)
If nro Private Sub Command1_Click()
Dim cuenta As Double
Dim i As Double
Dim nro As Integer
Dim cadena As String
If cadena = "" Then cadena = "0"
linea1:
For i = 0 To 1000000
If InStr(Str(i), cadena) > 0 Then
cuenta = cuenta + 1
Else
End If
Next i
Print nro & "-" & cuenta
cuenta = 0
nro = nro + 1
cadena = Str(nro)
If nro Private Sub Command1_Click()
Dim cuenta As Double
Dim i As Double
Dim nro As Integer
Dim cadena As String
If cadena = "" Then cadena = "0"
linea1:
For i = 0 To 1000000
If InStr(Str(i), cadena) > 0 Then
cuenta = cuenta + 1
Else
End If
Next i
Print nro & "-" & cuenta
cuenta = 0
nro = nro + 1
cadena = Str(nro)
If nro Private Sub Command1_Click()
Dim cuenta As Double
Dim i As Double
Dim nro As Integer
Dim cadena As String
If cadena = "" Then cadena = "0"
linea1:
For i = 0 To 1000000
If InStr(Str(i), cadena) > 0 Then
cuenta = cuenta + 1
Else
End If
Next i
Print nro & "-" & cuenta
cuenta = 0
nro = nro + 1
cadena = Str(nro)
If nro Private Sub Command1_Click()
Dim cuenta As Double
Dim i As Double
Dim nro As Integer
Dim cadena As String
If cadena = "" Then cadena = "0"
linea1:
For i = 0 To 1000000
If InStr(Str(i), cadena) > 0 Then
cuenta = cuenta + 1
Else
End If
Next i
Print nro & "-" & cuenta
cuenta = 0
nro = nro + 1
cadena = Str(nro)
If nro Private Sub Command1_Click()
Dim cuenta As Double
Dim i As Double
Dim nro As Integer
Dim cadena As String
If cadena = "" Then cadena = "0"
linea1:
For i = 0 To 1000000
If InStr(Str(i), cadena) > 0 Then
cuenta = cuenta + 1
Else
End If
Next i
Print nro & "-" & cuenta
cuenta = 0
nro = nro + 1
cadena = Str(nro)
If nro Private Sub Command1_Click()
Dim cuenta As Double
Dim i As Double
Dim nro As Integer
Dim cadena As String
If cadena = "" Then cadena = "0"
linea1:
For i = 0 To 1000000
If InStr(Str(i), cadena) > 0 Then
cuenta = cuenta + 1
Else
End If
Next i
Print nro & "-" & cuenta
cuenta = 0
nro = nro + 1
cadena = Str(nro)
If nro Private Sub Command1_Click()
Dim cuenta As Double
Dim i As Double
Dim nro As Integer
Dim cadena As String
If cadena = "" Then cadena = "0"
linea1:
For i = 0 To 1000000
If InStr(Str(i), cadena) > 0 Then
cuenta = cuenta + 1
Else
End If
Next i
Print nro & "-" & cuenta
cuenta = 0
nro = nro + 1
cadena = Str(nro)
If nro < 10 Then GoTo linea1
MsgBox "hecho!"
End Sub

este programa en visual basic nos muestra cuantos numeros que contienen al cero hay de 1 a un millon, pero tambien cuantas veces esta el 1,2,3,...,9, (de curiosos nada mas) la tabla que arroja es:

0-402131
1-111112
2-111111
3-111111
4-111111
5-111111
6-111111
7-111111
8-111111
9-111111

Luisito dijo...

por si les interesa, el programa es este, el anterior lo pegue mal....

Private Sub Command1_Click()
Dim cuenta As Double
Dim i As Double
Dim nro As Integer
Dim cadena As String
If cadena = "" Then cadena = "0"
linea1:
For i = 0 To 1000000
If InStr(Str(i), cadena) > 0 Then
cuenta = cuenta + 1
Else
End If
Next i
Print nro & "-" & cuenta
cuenta = 0
nro = nro + 1
cadena = Str(nro)
If nro por si les interesa, el programa es este, el anterior lo pegue mal....

Private Sub Command1_Click()
Dim cuenta As Double
Dim i As Double
Dim nro As Integer
Dim cadena As String
If cadena = "" Then cadena = "0"
linea1:
For i = 0 To 1000000
If InStr(Str(i), cadena) > 0 Then
cuenta = cuenta + 1
Else
End If
Next i
Print nro & "-" & cuenta
cuenta = 0
nro = nro + 1
cadena = Str(nro)
If nro por si les interesa, el programa es este, el anterior lo pegue mal....

Private Sub Command1_Click()
Dim cuenta As Double
Dim i As Double
Dim nro As Integer
Dim cadena As String
If cadena = "" Then cadena = "0"
linea1:
For i = 0 To 1000000
If InStr(Str(i), cadena) > 0 Then
cuenta = cuenta + 1
Else
End If
Next i
Print nro & "-" & cuenta
cuenta = 0
nro = nro + 1
cadena = Str(nro)
If nro por si les interesa, el programa es este, el anterior lo pegue mal....

Private Sub Command1_Click()
Dim cuenta As Double
Dim i As Double
Dim nro As Integer
Dim cadena As String
If cadena = "" Then cadena = "0"
linea1:
For i = 0 To 1000000
If InStr(Str(i), cadena) > 0 Then
cuenta = cuenta + 1
Else
End If
Next i
Print nro & "-" & cuenta
cuenta = 0
nro = nro + 1
cadena = Str(nro)
If nro por si les interesa, el programa es este, el anterior lo pegue mal....

Private Sub Command1_Click()
Dim cuenta As Double
Dim i As Double
Dim nro As Integer
Dim cadena As String
If cadena = "" Then cadena = "0"
linea1:
For i = 0 To 1000000
If InStr(Str(i), cadena) > 0 Then
cuenta = cuenta + 1
Else
End If
Next i
Print nro & "-" & cuenta
cuenta = 0
nro = nro + 1
cadena = Str(nro)
If nro por si les interesa, el programa es este, el anterior lo pegue mal....

Private Sub Command1_Click()
Dim cuenta As Double
Dim i As Double
Dim nro As Integer
Dim cadena As String
If cadena = "" Then cadena = "0"
linea1:
For i = 0 To 1000000
If InStr(Str(i), cadena) > 0 Then
cuenta = cuenta + 1
Else
End If
Next i
Print nro & "-" & cuenta
cuenta = 0
nro = nro + 1
cadena = Str(nro)
If nro por si les interesa, el programa es este, el anterior lo pegue mal....

Private Sub Command1_Click()
Dim cuenta As Double
Dim i As Double
Dim nro As Integer
Dim cadena As String
If cadena = "" Then cadena = "0"
linea1:
For i = 0 To 1000000
If InStr(Str(i), cadena) > 0 Then
cuenta = cuenta + 1
Else
End If
Next i
Print nro & "-" & cuenta
cuenta = 0
nro = nro + 1
cadena = Str(nro)
If nro por si les interesa, el programa es este, el anterior lo pegue mal....

Private Sub Command1_Click()
Dim cuenta As Double
Dim i As Double
Dim nro As Integer
Dim cadena As String
If cadena = "" Then cadena = "0"
linea1:
For i = 0 To 1000000
If InStr(Str(i), cadena) > 0 Then
cuenta = cuenta + 1
Else
End If
Next i
Print nro & "-" & cuenta
cuenta = 0
nro = nro + 1
cadena = Str(nro)
If nro <= 10 Then GoTo linea1
MsgBox "hecho!"
End Sub

ingrid dijo...

oiga en fin con ese poco de comentarios no supe cual de todos tiene la razon para la primera pregunta. la verdad es qe la primera pregunta me la dejaron de tarea en la U y les agradecerian qe me dieran realmente la respuesta