Tarea 1 de Diseño de Algoritmos

Trimestre 2011 Otoño
Entrega: 7 de octubre de 2011 a las 22:00.

Problema 1: Escribe un programa llamado relojZZ (donde ZZ es la clave de dos dígitos asignada por el profesor) basado en el algoritmo visto en clase para resolver el problema de las torres de Hanoi cuando sólo se permite mover discos de la aguja 1 a la aguja 2, de la aguja 2 a la aguja 3 y de la aguja 3 a la aguja 1. Su programa debe leer un entero N y debe generar como salida una lista de movimientos que muevan los N discos de la aguja 1 a la aguja 3. La lista debe contener dos enteros en cada renglón: 0 0 para indicar que terminó, mientras que A B significa que se movió un disco de la aguja A a la aguja B. Por ejemplo, si N = 1 una posible salida contiene los tres renglones 1 2, 2 3 y 0 0. Puedes suponer que 1 <= N <= 10.

Ejemplo de entrada
Ejemplo de salida
1
1 2
2 3
0 0

Problema 2: Los números de Lucas se definen de la siguiente manera: L(0) = 2, L(1) = 1 y L(N) = L(N-1) + L(N-2). Escribe un programa llamado lucasZZ (donde ZZ es la clave de dos dígitos asignada por el profesor) que lea un entero N y que calcule tanto el N-ésimo número de Lucas L(N) como la cantidad R de llamadas recursivas necesarias para obtener ese resultado. Por ejemplo si N = 3 entonces se llama a L(3), que a su vez llama a L(2) y a L(1). De estas dos, sólo L(2) hace llamadas recursivas a L(1) y a L(0), así en total se hacen R = 5 llamadas recursivas para calcular L(3) = 4.

Ejemplo de entrada
Ejemplo de salida
3
4 5

Notas: Tus programas no deben leer ni escribir nada adicional a lo que se indica en el enunciado. El tiempo de ejecución de sus algoritmos será considerado como parte de la evaluación.