PAT甲级1095

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXTITL 10
struct input{
    char car_num[MAXTITL];
    char time[MAXTITL];
    char status[MAXTITL];
    int time_num;
}; 
struct car{
    char car_num[MAXTITL];
    int in_time;
    int out_time;
    int stay_time; 
};
struct query{
    char query_time[MAXTITL];
    int  i_query_time;
    int car_num;
}; 
int main(int argc, char *argv[]) {
    int i,j,record_num,query_num;
    int car_items=0;
    int count_num=0;//完整记录的个数 
    struct input items[10001];
    struct car cars[10001];
    struct input min;//用于排序 
    scanf("%d",&record_num);
    scanf("%d",&query_num);
    for (i=0;i<record_num;i++){
        scanf("%s",&items[i].car_num);
        scanf("%s",&items[i].time);
        gets(items[i].status);
        items[i].time_num=((items[i].time[0]-'0')*10+(items[i].time[1]-'0'))*3600+((items[i].time[3]-'0')*10+
      (items[i].time[4]-'0'))*60+((items[i].time[6]-'0')*10+(items[i].time[7]-'0'));
    }
//  对输入记录按时间由小到大排序 
//    int cmp(struct input a, struct input b){
//        return a.time_num > b.time_num ?1:-1;
//    } 
//    qsort(items,record_num,sizeof(items[0]),cmp);
    for(i=0;i<record_num;i++){
        min=items[i]; 
        for(j=i+1;j<record_num;j++){
            if(min.time_num>items[j].time_num){
                items[i]=items[j];
                items[j]=min;
                min=items[i];
            }
        }           
    }
//  对完整记录进行转存 ,有进有出的称为完整记录 
    for(i=0;i<record_num;i++){
        if(strcmp(items[i].status," out")==0){
            for(j=i-1;j>=0;j--){
                if(strcmp(items[j].car_num,items[i].car_num)==0&&strcmp(items[j].status," in")==0){
                    strcpy(cars[count_num].car_num,items[i].car_num);
                    cars[count_num].in_time=items[j].time_num;
                    cars[count_num].out_time=items[i].time_num;
                    cars[count_num].stay_time=cars[count_num].out_time-cars[count_num].in_time;
                    count_num++; 
                    break;
                }else if(strcmp(items[j].car_num,items[i].car_num)==0&&strcmp(items[j].status," out")==0){
                    break;
                }
            }
        }
    }
//  先将有效记录中 车牌号相同的记录停车时间相加,并删除多余的记录
    for(i=0;i<count_num;i++){
        for(j=i+1;j<count_num;j++){
            if(strcmp(cars[j].car_num,cars[i].car_num)==0){
                cars[i].stay_time=cars[i].stay_time+cars[j].stay_time;
            }
        } 
    } 
//  找出停车时间最长的车 并存储在 max_car[5000]中 
    int max_time=cars[0].stay_time;
    int max_time_num=1;
    struct car max_car[5000];
    for(i=0;i<count_num;i++){
        if(cars[i].stay_time==max_time){            
            max_car[max_time_num-1]=cars[i];
            max_time_num++;
        }else if(cars[i].stay_time>max_time){
            max_time=cars[i].stay_time;
            max_time_num=1;
            max_car[max_time_num-1]=cars[i];
        }
    } 
//  对max_car结构中的条目按车牌号进行排序 
    struct car min_car_number;
    for(i=0;i<max_time_num-1;i++){
        min_car_number= max_car[i]; 
        for(j=i+1;j<max_time_num-1;j++){
            if(strcmp(min_car_number.car_num,max_car[j].car_num)>0){
                max_car[i]=max_car[j];
                max_car[j]=min_car_number;
                min_car_number=max_car[j];
            }
        }   
    }
//  输入查询时间,并将其转换为整型 
    struct query query_times[query_num];
    for(i=0;i<query_num;i++){
        gets(query_times[i].query_time);
        query_times[i].i_query_time=((query_times[i].query_time[0]-'0')*10+(query_times[i].query_time[1]-'0'))*3600+
        ((query_times[i].query_time[3]-'0')*10+(query_times[i].query_time[4]-'0'))*60+((query_times[i].query_time[6]-'0')*10+
        (query_times[i].query_time[7]-'0'));
    }
    for(i=0;i<query_num;i++){
        query_times[i].car_num=0;
        for(j=0;j<count_num;j++){
            if(cars[j].in_time<=query_times[i].i_query_time&&cars[j].out_time>query_times[i].i_query_time){
                query_times[i].car_num++;
            }
        }
    }     
//  输出各个时间点的车辆数目 
    for(i=0;i<query_num;i++){
        printf("%d\n",query_times[i].car_num);
    }
//  输出停车时间最长的车辆以及停车时间

    for(i=0;i<max_time_num-1;i++){  
        printf("%s ",max_car[i].car_num);   
    } 
    printf("%02d:%02d:%02d",max_time/3600,(max_time-(max_time/3600)*3600)/60,(max_time-(max_time/3600)*3600)%60);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值