开门人和关门人

一.题目描述

 测试用例

//用例输入
3
1
ME3021112225321 00:00:00 23:59:59
2
EE301218 08:05:35 20:56:35
MA301134 12:35:45 21:40:42
3
CS301111 15:30:28 17:00:10
SC3021234 08:00:00 11:25:25
CS301133 21:45:00 21:58:4
//用例输出
ME3021112225321 ME3021112225321
EE301218 MA301134
SC3021234 CS301133

二.定义结构体,结构体内包含字符串identify(存身份证号),六个int型存储两个时间hour1,minute1,second1,hour2,minute2,second2

数据读入:读入天数,循环天数读入人头,人头存储到定义的结构体数组中

两个函数,找出开门人和关门人,思路是循环比较每一组的时间,以开门为例,找出最小时间。存储下标到cnt,初值设为零,循环i从小时开始比较,若i的小时小于cnt的,则更新;若是等于,则比较分钟,分钟小,更新下标cnt;分钟相等则比较秒...以此类推

三.代码实现

#include<cstdio>
const int N = 20;

struct Data{//定义结构体 
    int hour1,minute1,second1,hour2,minute2,second2;
    char identify[N];
};

void find_open(struct Data people[],int x)
{
	int cnt = 0;
	for(int i=1;i<x;i++)
	{
		if(people[cnt].hour1>people[i].hour1)//按小时分钟秒比较 ,开门的人 
		{
    		cnt = i;

   		}else if(people[cnt].hour1==people[i].hour1)
		   {
    		if(people[cnt].minute1>people[i].minute1)
    		{
    			cnt = i;
    		}else if(people[cnt].minute1==people[i].minute1)
    			{
    				if(people[cnt].second1>people[i].second1)
    				cnt = i;
				}
			}
	}
	printf("%s ",people[cnt].identify);//输出开门的人加空格
}

void find_close(struct Data people[],int x)
{
	int cnt = 0;//cnt记录下标 
	for(int i=1;i<x;i++)
	{
		if(people[cnt].hour2<people[i].hour2)//按小时分钟秒比较 ,开门的人 
		{
    		cnt = i;

   		}else if(people[cnt].hour2==people[i].hour2)
		   {
    		if(people[cnt].minute2<people[i].minute2)
    		{
    			cnt = i;
    		}else if(people[cnt].minute2==people[i].minute2)
    			{
    				if(people[cnt].second2<people[i].second2)
    				cnt = i;
				}
			}
	}
	printf("%s\n",people[cnt].identify);//输出关门的人 并换行 
	
}

int main()
{
	int n,x;
    scanf("%d",&n);//多少天 
    while(n--)
    {
        scanf("%d",&x);//多少人 
        
        struct Data people[x+1]; //定义数组存储信息 
        
        for(int i=0;i<x;i++)//数据输入 
        	scanf("%s %d:%d:%d %d:%d:%d",people[i].identify,&people[i].hour1,&people[i].minute1,&people[i].second1,&people[i].hour2,&people[i].minute2,&people[i].second2);
		find_open(people,x);
		find_close(people,x);
    }
    
    return 0;
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值