Download Entrada
Document related concepts
Transcript
Para una de los siguientes enunciados, redacte un programa C++ que lo resuelva. 1. El factorial de un numero N (se escribe N!) se define como el producto de todos los enteros desde 1 hasta N. A veces se define recursivamente como sigue: 1! = 1 N! = N * (N - 1)! Los factoriales crecen muy rápidamente –5! = 120, 10! = 3,628,800. Una forma de especificar números tan grandes es especificando el numero de veces que cada número primo ocurre en él, por tanto, 825 puede especificarse como (0 1 2 0 1) significando ningún dos, 1 tres, 2 cinco, ningún siete y 1 once. Escriba un programa que lea un número entero N (2 <= N <+ 100) y despliegue su factorial en términos de las cantidades de primos que contiene. Entrada La entrada consiste de una serie de líneas, cada línea contiene un solo entero N. El archivo termina con una línea que consiste de solamente un 0. Salida La salida consiste de una serie de bloques de líneas, un bloque para cada línea de la entrada. Cada bloque empezará con el número N, justificado a la derecha en un campo de 3 columnas, y el caracter ‘!’, espacio, e ‘=’. Esto será seguido por una lista con el número de veces que cada número primo ocurre en N!. Estos números deben ser justificados a la derecha en campos de 3 columnas de ancho, y cada línea (excepto la última de un bloque, la cual podría ser más corta) debe contener quince números. Cualquier línea después de la primera debe ser indentada. Siga el diseño del ejemplo que se muestra debajo fielmente. Ejemplo de entrada 5 53 0 Ejemplo de salida 5! = 3 1 1 53! = 49 23 12 1 8 4 4 3 2 2 1 1 1 1 1 1 //===// 2. Durante la crisis de energía de Nueva Zelanda en este invierno (causada por falta de lluvia, y por tanto, bajos niveles en las presas hidroeléctricas) un esquema de contingencia fue desarrollado para cortar la energía a las distintas áreas del país de una manera sistemática, completamente justa. El país fue dividido en N regiones (Awckland fue la región 1 Wellington la número 13). Un número, m, debe ser elegido ‘al azar’, y la energía debe ser apagada primero en la región 1 (claramente el punto de inicio más justo) y luego en m-sima región después de esa, y volviendo a 1 después de N, e ignorando las regiones ya apagadas. Por ejemplo, si N = 17 y m = 5, la energía debe ser cortada a las regiones en el siguiente orden: 1,6,11,16,5,12,2,9,17,10,4,15,14,3,8,13,7. El problema es que claramente lo más justo es apagar Wellington al final (después de todo es donde están las oficinas principales de Electricidad), por tanto, para un N dado, el número ‘al azar’ m necesita ser cuidadosamente escogido de manera que la región 13 sea la última región seleccionada. Escriba un programa que leerá el número de regiones y luego determine el número m más pequeño que asegure que Wellington (región 13) pueda funcionar mientras el resto del país está a oscuras. Entrada y salida La entrada consiste de una serie de líneas, cada línea contiene el numero de regiones (N) con 13 <= N <= 100. El archivo terminara con una línea que consiste de un 0. La salida consistirá de una serie de líneas, una para línea de la entrada (excepto para la ultima, la del cero). Cada línea consistirá del número m de acuerdo al esquema arriba descrito. Ejemplo de entrada 17 0 Ejemplo de salida 7 //===// 3. Dada una cantidad de dinero y un número ilimitado (casi) de monedas, sabemos que una cantidad de dinero puede distribuirse de una variedad de formas. Un problema más interesante surge cuando los bienes son comprados y se necesita pagar por ellos, cuando la necesidad de intercambiar monedas puede darse. Dados los recursos finitos de las mayorías de las carteras hoy en día, estamos limitados en el número de maneras en que podemos conformar una cantidad para pagar nuestras compras –asumiendo que podemos juntar la cantidad en primer lugar- pero esa es otra historia. El problema puede ser reconsiderado si el número de monedas que cambian de manos en tal transacción debe ser minimizado, asumiendo que el dueño de la tienda tiene un adecuado suministro de todos los tipos de monedas. (El conjunto de monedas para Nueva Zelanda es de las 5c, 10c, 20c, 50c, $1, 2$.) Por tanto, si necesitamos pagar 55c, y no tenemos monedas de 50c, pagaremos esto como 2*20c + 10c + 5c, haciendo un total de 4 monedas. Si pagamos con $1, recibiremos 45c de devuelta, lo cual también involucra 4 monedas, pero si pagamos $1.05 ($1 + 5c), nos toca una devuelta de 50c y el número total de monedas que cambian de mano es solamente de 3. Escriba un programa que lea los recursos disponibles para usted y el monto a pagar, y determine el número mínimo de monedas que cambien de manos. Entrada La entrada consiste de una serie de líneas, cada línea define una situación diferente. Cada línea consiste de 6 enteros representando los números de monedas disponibles para usted en el orden dado arriba, seguido por un número real que representa el valor de la transacción, el cual es siempre menor que $5.00. El archivo termina con seis ceros (0 0 0 0 0 0). El valor total de las monedas siempre será suficiente para juntar el monto y el monto siempre será alcanzable, esto es, siempre será un múltiplo de 5c. Salida La salida consistirá de una serie de líneas, una para cada situación definida en la entrada. Cada línea consistirá del número mínimo que cambian de manos, justificado a la derecha en un campo de 3 caracteres de ancho. Ejemplo de entrada 2 4 2 2 1 0 2 4 2 0 1 0 0.95 0.55 0 0 0 0 0 0 Ejemplo de salida 2 3 //===// 4. La expansión decimal de la fracción 1/33 es 0.03, donde el 03 (el sub-rayado debió ser super-rayado) indica que el ciclo 03 se repite indefinidamente sin otros dígitos que intervengan. De hecho, la expansión decimal de cada número racional (fracción) tiene un ciclo repetitivo, distinto a las expansiones decimales de los números irracionales, las cuales no tienen tales ciclos repetitivos. Ejemplos de expansiones decimales de números racionales y sus ciclos repetitivos se muestran más abajo. Aquí, usamos paréntesis para encerrar el ciclo repetitivo en lugar de la barra sobre el ciclo. fracción expansión decimal ciclo repetitivo longitud del ciclo 1/6 5/7 1/250 300/31 655/990 0.1960 0.(714285) 0.004(0) 9.(677419354838709) 0.6(61) 6 714285 0 677419354838709 61 1 6 1 15 2 Escriba un programa que lea los numeradores y los denominadores de las fracciones y determine sus ciclos repetitivos. Para los fines de este problema, defina el ciclo repetitivo de una fracción como la longitud de la primera mínima cadena de dígitos a la derecha del punto decimal que se repite indefinidamente sin otros dígitos que intervengan. Por ejemplo, el ciclo repetitivo de la fracción 1/250 es 0, el cual empieza en la posición 4 (y no 0, que empieza en las posiciones 1 ó 2, y no la 00, la cual empieza en las 1 ó 4). Entrada Cada línea del archivo de entrada consiste de un entero como numerador, que es no negativo, seguido de un denominador, que es positivo. Ninguno de los enteros excede a 3000. End-of-file indica el fin de archivo. Salida Para cada línea de la entrada, despliegue la fracción, su expansión decimal hasta la ocurrencia del ciclo a la derecha del punto decimal o 50 lugares decimales, (lo que ocurra primero) y la longitud del ciclo repetitivo completo. Al escribir la expansión decimal, encierre el ciclo decimal entre paréntesis cuando sea posible. Si el ciclo repetitivo completo no ocurre entre los primeros 50 lugares, coloque un paréntesis izquierdo conde empieza el ciclo –él iniciará los primeros 50 lugares- y coloque “…)” después de 50-avo dígito. Imprima una línea en blanco después de cada saso de prueba. Ejemplo de entrada 76 25 5 43 1 397 Ejemplo de salida 76/25 = 3.04(0) 1 = number of digits in repeating cycle 5/43 = 0.(116279069767441860465) 21 = number of digits in repeating cycle 1/397 = 0.(00251889168765743073047858942065491183879093198992...) 99 = number of digits in repeating cycle //===// 5. Dado un número, podemos formar una cadena de números mediante 1. 2. 3. 4. ordenar sus dígitos ascendentemente ordenar sus dígitos descendentemente restar el número obtenido en (2) al número obtenido en (1) y formar un nuevo número y repetir estos pasos al menos que el nuevo número haya aparecido en la cadena Note que 0 es un dígito permitido. La cantidad de números distintos en la cadena es la longitud de la cadena. Usted debe escribir un programa que lea números y escriba las cadenas de números y la longitud de esa cadena para cada número leído. Entrada y salida La entrada consiste de una secuencia de números positivos, todos menores que 10^9, cada uno en su propia línea, terminada por 0. El archivo de entrada contiene a lo sumo 5000 números. La salida consiste de las cadenas de números generadas a partir de los números de la entrada, seguidos por las longitudes exactamente con el formato indicado a seguidas. Después de cada cadena de números y longitud de cadena, incluyendo la última, debe haber una línea en blanco. Ninguna cadena contiene más de 1000 números distintos. Ejemplo de entrada 123456789 1234 444 0 Ejemplo de salida Original number was 123456789 987654321 - 123456789 = 864197532 987654321 - 123456789 = 864197532 Chain length 2 Original number was 1234 4321 - 1234 = 3087 8730 - 378 = 8352 8532 - 2358 = 6174 7641 - 1467 = 6174 Chain length 4 Original number was 444 444 - 444 = 0 0 - 0 = 0 Chain length 2 //====// Fuente no especificada.