題意:

給你日程表,算出日程表中間空格最大的休息時間,一天的時間是從10:00~18:00

 

解法:

他的時間不會按照順序,所以要先存起來之後做排序

我另外把10:00以及18:00兩個時間也丟進去一起排序,這樣就不用做特殊處理了

另外聽網路上說,可能會有n=0的情況,如果n=0表示有從10點開始共8小時的休息時間

 

程式碼:

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

int n;
char str[12345];
int time[12345][2];
int cmp(const void*a,const void*b){
    int *p = (int*)a;
    int *q = (int*)b;
    return p[0]-q[0];
}
int main(){
    int i;
    int max;
    int maxTime;
    int h,m;
    int Case = 0;
    while(scanf("%d",&n)!=EOF){
        time[0][0] = 0;
        time[0][1] = 10*60;
        for(i=1;i<=n;++i){
            scanf("%d%*c%d",&h,&m);
            time[i][0] = h*60+m;
            scanf("%d%*c%d",&h,&m);
            time[i][1] = h*60+m;
            gets(str);
        }
        time[n+1][0] = 18*60;
        time[n+1][1] = 24*60;
        n = n+2;
        qsort(time,n,sizeof(time[0]),cmp);

        max = 0;
        for(i=1;i<=n;++i){
            if(max < time[i][0]-time[i-1][1]){
                max = time[i][0]-time[i-1][1];
                maxTime = time[i-1][1];
            }
        }
        printf("Day #%d: the longest nap starts at %.2d:%.2d and will last for ",++Case,maxTime/60,maxTime%60);
        if(max<60)printf("%d minutes.\n",max);
        else printf("%d hours and %d minutes.\n",max/60,max%60);
    }

    return 0;
}

arrow
arrow
    全站熱搜

    alan790712 發表在 痞客邦 留言(0) 人氣()