Proyecto Euler - Problema 1
Este es el primero de una serie de 232 problemas (que siguen creciendo) del proyecto Euler que ya presenté hace unos dÃas.
El enunciado de este problema dice lo siguiente:
Si listamos todos los números naturales debajo de 10 que son múltiplos de 3 o 5, tenemos 3, 5, 6 y 9. La suma de estos múltiplos es 23.
Encuentra la suma de todos los múltiplos de 3 o 5 debajo de 1000.
Ahora bien, algo bastante común que podemos hacer, que es lo más lógico que nos sale a todos cuando queremos resolverlo, es recorrer todos los números hasta el 1000 e ir controlando que sean divisibles por alguno de esos numeros. Yendo al código (en C++) serÃa algo asÃ:
main()
{
int i,r=0;
for(i; i < 1000; i++){
if( (i%3==0) || (i%5==0) ){
r = r + i;
}
}
printf("%d",r);
}
Eso pedaso de código funciona genial y resuelve el problema, pero yo quiero tratar de buscarle otras formas de resolverlo.
Cuando estaba analizando cada número de los que son multiplos de 3 o 5, me encontre con un patron de distancia entre números. Todos los números estan separados por esta serie que se repite por siempre: {3,2,1,3,1,2,3}.
Teniendo esas distancia entre números no hace falta controlar si es o no divisor, solo sumanos y nada más. Es decir: 0+3=3, 3+2=5, 5+1=6, 6+3=9, 9+1=10, 10+2=12, 12+3=15. Los resultados de cada una de estas pequeñas sumas, son esos multiplos de 3 y 5.Y asà sigue.
El resultado, podrÃa ser algo asÃ:
main()
{
int patron[7] = {3,2,1,3,1,2,3};
int result=0, x=0;
for(int i=0; i < 1000; i+=patron[x-1] ){
result += i;
x = (x==7)? 1 : x+1;
}
printf("%d",result);
}
Seguramente, habra formas mas lindas de escribir ese código, pero como ya dije, lo que me gusta de esto es jugar con los números y las cuentas, no tanto si un for es o no más rapido que un while.
Escucho alternativas con gusto!
Conclusión
main()
{
int patron[7] = {3,2,1,3,1,2,3};
int result=0, x=0;
for(int i=0, x=0; i < 1000; i += patron[x], x = (x==6)? 0 : x+1)
result += i;
printf("%d\n",result);
}
Entradas Relacionadas
Acerca de esta entrada
Estás leyendo “Proyecto Euler - Problema 1”, una entrada de vBracco
- Publicada:
- 19/02/09 a las 1pm
- Categorías:
- Desafios, Matemática, Programacion













7 Comentarios
Ir al formulario | comments rss [?] | trackback uri [?]