9513, 81816, 93513, 94143, 95193, 816816, 888216, 933513, 934143, 935193, 941493, 951993, 2491578, 8166816, 8868216, 9333513, 9334143, 9335193, 9341493, 9351993, 9414993, 9519993, 24915798, 49827156, 81666816, 87127446, 88668216, 93333513
Este requisito ha de cumplirse en sentido estricto:
* No pueden contener cifras nulas.
* No pueden poseer ellos mismos las cifras ya ordenadas.
El primer ejemplo de la lista es el número 9513, que no contiene cifras nulas y es múltiplo de 1359, formado por las cifras 9, 5, 1 y 3 ordenadas de forma creciente.
Los cocientes que se forman son “casi todos” iguales a 7. Investiga este hecho si quieres.
Un ejercicio muy formativo es el de obtener esa misma lista con nuestros propios instrumentos, que aquí será la hoja de cálculo. Para ello debemos organizar muy bien el proceso, y en esta tarea aprenderemos de Matemáticas y de programación mucho más de lo que nos creemos. Presentamos una organización del proceso de obtención de la lista presentada, aunque sería deseable que nuestros lectores no siguieran leyendo y pasaran a su propia organización. Así también ellos, como nosotros, aprenderían probando.
Un posible esquema sería el siguiente:
Obtención de la lista de números
* Se recorren todos los números A desde un inicio hasta un número final.
* Para cada uno se realizan estas operaciones:
- Calcular el número de cifras de A
- Extraer todas las cifras de A. Si alguna es cero se rechaza el número.
- Ordenar las cifras
- Formar con esas cifras un nuevo número B
* Si A es múltiplo de B se incorpora A a la lista.
* Se pasa al siguiente número
Si te interesa la programación en Basic, puedes estudiar el siguiente código comentado para OpenOffice.org Calc:
Funciones auxiliares
Para saber si m es múltiplo de n. Devuelve 1 si lo es, y 0 si no lo es
Public function esmultiplo(m,n)
if m=int(m/n)*n then esmultiplo=1 else esmultiplo=0
end function
Para contar el número de cifras
Public function numcifras(n)
numcifras=int(log(n)/log(10))+1
end function
Extrae la cifra de orden n de un número m
Public function cifra(m,n)
dim a,b
a=10^(n-1)
b=int(m/a)-10*int(m/a/10)
cifra=b
end function
Algoritmo de búsqueda
Sub busquedas
dim n,m,i,j,k,l,a,b,fila,p,q
dim ci(12)
Lee el inicio (celda G7) y el final (celda H7)
n=StarDesktop.CurrentComponent.sheets(0).GetCellByPosition(6,6).value
m=StarDesktop.CurrentComponent.sheets(0).GetCellByPosition(7,6).value
fila=8
Recorre los numeros
for i=n to m
Extrae cifras y las ordena
Extrae cifras
k=numcifras(i)
for l=1 to k
ci(l)=cifra(i,l):if ci(l)=0 then exit sub 'no se admiten cifras nulas
next l
Las ordena
if k>=1 then
for j=1 to k-1
for p=2 to k
if ci(p-1)
next j
end if
Construye el número con cifras ordenadas
q=0
for j=1 to k
q=q+ci(j)*10^(j-1)
next j
‘si es múltiplo, lo presenta en columna
if esmultiplo(i,q)=1 and i<>q then
StarDesktop.CurrentComponent.sheets(0).GetCellByPosition(6,fila).value=i
StarDesktop.CurrentComponent.sheets(0).GetCellByPosition(7,fila).value=q
fila=fila+1
end if
next i
end sub
Ánimo y a estudiarlo, que contiene bastante información valiosa.
No hay comentarios:
Publicar un comentario