奇怪的电子表

来源:互联网 发布:比价软件哪个好用知乎 编辑:程序博客网 时间:2024/05/01 17:31

Q有一块很旧的电子表,上面会显示当前的时间,如YMDhms秒。小Q201211000秒的时候根据标准时间调整过表,但是也正因为这次调整,这块旧表出现了一些奇怪的电子故障:时钟、分钟和秒钟在显示20之后,将跳过21而直接显示22。也就是说秒钟从20跳转到22只需要1秒,分钟从20跳转到22只需要59秒(因为秒钟从2022只用1秒),时钟依此类推。小Q只有这一块电子表,所以他想从表上显示的时间推算出当前真正的时间。

输入:

第一行有一个正整数T (T <=100),描述有多少组数据。每一组输入有一行,用来描述电子表的时间,格式为:Y-M-D h:m:s

Y表示年份(在本题中一定是2012),M表示月份,D表示日期。这三个数字用-隔开,接下来是一个空格。之后的h,m,s分别表示时、分、秒。保证输入的数据都是合法的,其中h,m,s都不会显示为21

输出:

对于每一个电子表显示的日期时间,输出当前真正的时间。注意所有的月份、日期、时、分、秒不足两位数的时候,前面都有前缀0

样例输入:

2

2012-01-01 00:00:20

2012-01-01 00:00:22

样例输出:

2012-01-01 00:00:20

2012-01-01 00:00:21

注意事项:
1.模板语言仅作参考,"{sysFileUrl}"为系统输入文件,请不要修改。
2.可多次运行,运行正确后请 切记提交保存,保存后将不能修改。
3.运行只判断结果是否正确,不输出具体结果。
4.若系统卡死请先备份代码,可刷新页面后再次运行。
5.程序运行时间限制10s,内存限制128M。

可行代码:

#include <stdio.h>#include <stdlib.h>#include <string.h>int daysOfMonth[] = { 0,                      31, 29, 31,                      30, 31, 30,                      31, 31, 30,                      31, 30, 31,                    };int main(int argc, char *argv[]){    int T;    int i;    int j;    int year;    int month;    int day;    int hour;    int minute;    int second;    int days;    int seconds;    int minutes;    int hours;    FILE *fp = fopen("{sysFileUrl}", "r");    if(NULL != fp) {        fscanf(fp, "%d", &T);        for(i = 0; i < T; ++i) {            fscanf(fp, "%d-%d-%d %d:%d:%d",                        &year, &month, &day,                        &hour, &minute, &second);            days = 0;            for(j=1; j < month; ++j){                days += daysOfMonth[j];            }            --day;       //天数从1号开始            days += day; //经过的总天数;            if(second > 20) --second;            if(minute > 20) --minute;            if(hour > 20) --hour;            seconds = days * 23 * 59 * 59 + hour * 59 * 59 + minute * 59 + second;            second = seconds % 60;            minutes = seconds / 60;            minute = minutes % 60;            hours = minutes / 60;            hour = hours % 24;            days = hours / 24;            for(j = 1; j <= 12; ++j) {                if(days >= daysOfMonth[j]) {                    days -= daysOfMonth[j];                } else {                    break;                }            }            day = ++days;            month = j;            printf("%d-%02d-%02d %02d:%02d:%02d\n", year, month, day, hour, minute, second);        }        fclose(fp);    }    return 0;}