鸿 网 互 联 www.68idc.cn

当前位置 : 服务器租用 > 编程语言开发 > erlang > >

HDU1234 开门人和关门人(解法二)

来源:互联网 作者:佚名 时间:2016-07-17 21:19
问题链接:HDU1234 开门人和关门人。 之前所做的程序质量不高,所以重做该题的题解。上次使用了结构数组和排序,完全没有必要,一边读入数据,一边处理就可以解决问题。参见: HDU1234 开门人和关门人 (旧版本) 。 程序中时间转换为整数(秒单位),以便比

问题链接:HDU1234 开门人和关门人。

之前所做的程序质量不高,所以重做该题的题解。上次使用了结构数组和排序,完全没有必要,一边读入数据,一边处理就可以解决问题。参见:HDU1234 开门人和关门人(旧版本)

程序中时间转换为整数(秒单位),以便比较。

AC通过的C语言程序如下:
/* HDU1234 开门人和关门人 */

#include <stdio.h>
#include <string.h>

int main()
{
    int n, m;
    int h, mi, s;

    char startname[20];
    char endname[20];
    int minstarttime;
    int maxendtime;

    char name[20];
    int starttime;
    int endtime;

    // 读入总天数(测试组数)
    scanf("%d", &n);
    while(n--) {
        // 读入记录数
        scanf("%d", &m);

        // 设置暂时的最小开门时间和最大关门时间
        minstarttime = 24 * 3600;
        maxendtime = 0;

        // 读入各个记录,并且求最小开门时间和最大关门时间
        for(int i=1; i<=m; i++) {
            scanf("%s %d:%d:%d", name, &h, &mi, &s);
            starttime = s + mi * 60 + h * 3600;
            if(starttime < minstarttime) {
                minstarttime = starttime;
                strcpy(startname, name);
            }

            scanf("%d:%d:%d", &h, &mi, &s);
            endtime = s + mi * 60 + h * 3600;
            if(endtime > maxendtime) {
                maxendtime = endtime;
                strcpy(endname, name);
            }
        }

        // 输出结果
        printf("%s %s\n", startname, endname);
    }

    return 0;
}



网友评论
<