Download Entrada

Document related concepts

Printf wikipedia , lookup

0,9 periódico wikipedia , lookup

Número computable wikipedia , lookup

Codificación aritmética wikipedia , lookup

Ordenamiento por cuentas wikipedia , lookup

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.