Se le dará
tiempo de duración en segundos, tienes que convertirlo en años, meses, días,
horas, minutos y segundos.
Se puede
suponer que, a 1 año = 12 meses, 1 mes = 30 días, 1 día = 24 horas, 1 hora = 60
minutos y 1 minuto = 60 segundos.
Entrada
La primera
línea contiene el número de casos de prueba T (T ≤ 50). Luego siguen las líneas
de T, conteniendo cada uno un número entero positivo S, el número de segundos
(1 ≤ S ≤ 10 ^ 9).
Salida
Para cada
caso de prueba imprimir el número de caso por primera vez como se muestra en la
sección de entrada / salida de la muestra. Entonces usted tiene que imprimir el
número de años, meses, días, horas, minutos y segundos en este orden. Si
cualquiera de estos términos es 0, no imprimirlo, si alguno de estos término
tiene una magnitud> 1, imprima la unidad en forma plural, de lo contrario,
imprimirlo en forma singular. Por ejemplo, no debe haber ningún término como 0
minutos; debe omitir la parte de minutos para tales situaciones. Además, para
un valor del año 1, tienes que imprimir 1 año, no 1 años, y durante 10 meses,
tienes que imprimir 10 meses, no de 10 mese. Comprobar entrada y salida de
ejemplo para más detalles.
Ejemplo
Entrada:
6
1
59
60
395
3840305
31104000
Salida:
Caso 1: 1
segundo
Caso 2: 59
segundos
Caso 3: 1
minuto
Caso 4: 6
minutos 35 segundos
Caso 5: 1
mes 14 días 10 horas 45 minutos 5 segundos
Caso 6: 1 año
Estrategia de solución en prosa
Al momento
de leer y releer el problema, me hacia la siguiente pregunta: ¿Cuáles variables necesito para
realizar el programa?
Primero
observe que necesitaba seis variables,
las cuales iban a ser: an (año), mes (meses), dia (días), ho (horas), mi (minutos), segu (segundos), t
(casos) e i (contador). La variable an, será para contar los años, la
variable mes, para contar los meses,
la variable ho, para contar los
horas, la variable mi, para contar
los minutos, la variable segu, para
contar los segundos y para que sean guardados los que introduzca el
programador, la variable t, para los
casos y por último la variable i,
para contar los casos y para hacer que el ciclo for se repita tantas veces que casos.
El primer
paso fue declarar las variables, luego de pedir que se introduzcan la cantidad
de casos. Ya obtenidos los casos, utilice un for,
para se pida los segundos para x
casos, después de obtenidos los segundos, utilizo un while para calcular los años, meses, días, horas y minutos que
hacen los segundos introducidos por el programador y los segundos restantes se
imprimirán. Dentro del while utilizo
if, el cual se va a cumplir si se
cumple lo que está dentro del paréntesis. En los diferentes if se harán las conversiones del
tiempo. Un ejemplo de las condiciones dentro de la función if, es que si los segundos son mayores o iguales (>=) que los
segundos, se le sumara uno a la variable que le corresponde a los minutos y así
sucesivamente con las demás variables.
Después de
salir del ciclo de repetición while, hice
varias condiciones, que si se cumplen deberán de imprimirme la cantidad del
tiempo en plural o en singular y si son cero no imprimirse, tal y como dice el
problemas. Y terminado de imprimirse, por ejemplos la conversión del primer
caso, hice cero las variables, para que no se le sumara los valores impreso al
caso siguiente.
Código C documentado de la solución hallada
#include <stdio.h>
#include <stdlib.h>
int main()
{
/*Convertidor de segundos a años, meses, días,
horas, minutos y los segundos */
long mes=0, an=0, dia=0, mi=0, ho=0, segu, t, i; /*mes,
años, dias, minutos, horas, segundos, casos, contador*/
scanf("%d", &t);
for (i=1;
i<=t; i++){
scanf("%d", &segu);
while(segu>=60){
if
(segu>=60){
mi++;
segu=segu-60;
}
if(mi>=60){
ho++;
mi=mi-60;
}
if(ho>=24){
dia++;
ho=ho-24;
}
if
(dia>=30){
mes++;
dia=dia-30;
}
if(mes>=12){
an++;
mes=mes-12;
}
}
printf("Case %d: ", i);
if(an==1){
printf("%d
year ",an);
}else if(an > 1){
printf("%d
years ", an);
}
if(mes==1){
printf("%d
month ",mes);
}else if(mes > 1){
printf("%d
months ", mes);
}
if(dia==1){
printf("%d
day ",dia);
}else if(dia > 1){
printf("%d
days ", dia);
}
if(ho==1){
printf("%d
hour ",ho);
}else if(ho > 1){
printf("%d
hours ", ho);
}
if(mi==1){
printf("%d minute ",mi);
}else if(mi > 1){
printf("%d
minutes ", mi);
}
if(segu==1){
printf("%d
second ",segu);
}else if(segu > 1){
printf("%d
seconds ", segu);
}
printf("\n");
mi=0;
an=0;
mes=0;
ho=0;
dia=0;
}
return 0;
}
No hay comentarios.:
Publicar un comentario