martes, 26 de abril de 2016

Seconds apart

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 xcasos, 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