Tarea 2 de Diseño de Algoritmos

Trimestre 2009 Otoño
Entrega: 26 de octubre de 2009 a las 22:00.

Problema 1: Escribe un programa llamado pfijoZZ (donde ZZ es la clave de dos dígitos asignada por el profesor) basado en un algoritmo de divide y vencerás para resolver el problema del punto fijo del examen (que a su vez es similar al de la búsqueda binaria). Tu programa debe leer un entero N y un vector A = (A1, A2, ..., AN) con N enteros positivos tales que A1 < A2 < ... < AN y debe escribir dos enteros M y P, donde M = AM y P es el número de preguntas que se hicieron para encontrar M. Por ejemplo si N = 5 y A = (1, 2, 4, 8, 16) entonces tu algoritmo debe preguntar primero en la posición 3 y después preguntará en la posición 1, encontrando un 1 y terminando. Puedes suponer que 1 <= N <= 1,000,000 y que 0 < A1 < A2 < ... < AN < 1,000,000,000. También puedes suponer que siempre habrá al menos un punto fijo.

Ejemplo de entrada
Ejemplo de salida
5
1 2 4 8 16
1 2

Problema 2: Diseñe un algoritmo usando la técnica de búsqueda con retroceso para resolver el siguiente problema: Dados dos enteros positivos N y K encuentre la cantidad F de formas distintas en que se puede escribir N como suma de K enteros positivos. Considere que dos formas son idénticas si sólo difieren en el orden de sus sumandos. Por ejemplo, si N = 7 y K = 3 entonces F = 4 debido a que 7 = 1 + 1 + 5 = 1 + 2 + 4 = 1 + 3 + 3 = 2 + 2 + 3. Escriba un programa llamado ksumaZZ (donde ZZ es la clave de dos dígitos asignada por el profesor) basado en su algoritmo que acepte como entrada dos enteros positivos N y K y que escriba como sallida el número F. Puede suponer que 1 <= K <= N <= 100.

Ejemplo de entrada
Ejemplo de salida
7 3
4

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.