快手是比较火的一款短视频app软件,里面每天都会更新一些有趣的视频,因此它的出现成为了我们打发时间的一种方式,但是有些同学进去看到有趣的视频就会停不下来,导致沉迷于此。当你进入和退出快手app的时候它的后台都有一个记录数据,即进入快手的时间和退出的时间。现在你的班主任想知道你们一天中刷快手的时间最长的同学是谁,于是就向快手平台要了你们班的后台记录数据,但是这些数据都是零散的,请你帮助你的班主任找出你们班的快手狂人。 定义:快手狂人为一天中刷视频时间最长的同学。
输入格式:
在第一行给两个整数n和m(1≤n≤100,1≤m≤1000),n代表你们班上的人数,m代表数据的条数,接下来m行每行给一组数据,格式为:学号 进入时间 退出时间,你们班的学号为从0~n-1编号并且为两位数。
输出格式:
输出你们班的快手狂人的学号及其刷视频的时间,题目保证这样的同学只有一个。
注:输出的学号为两位数,不足两位补前导0。
输入样例:
3 5
001 04:12:40 04:41:33
000 16:42:03 16:49:27
002 05:14:50 05:37:52
000 04:13:30 04:37:49
000 12:00:15 12:08:46
输出样例:
快手狂人为: 000 00:40:14
整体思路大概就是:
1、求出经过的时间,但是求经过的时间需要注意一些东西 如进小时位,计算秒钟位;
2、然后进行比较(可以统一单位后比较)在这个题目中我就是将所有的时间统一为了秒钟再找的最大值
#include <stdio.h>
#include <stdlib.h>
int n , m ;
struct ks
{
//int xh;
int h1,m1,s1;//开始时间
int h2,m2,s2;//结束时间
int ph,pm,ps;//经过时间
int total;//用于比较的总时间
};
struct ks a[120] ;
int main()
{
int xh , i = 1 , j ;
int ci = 0 ;//储存最大值的位置(学号)
scanf("%d %d",&n , &m);
int max = -1 ;
for( i = 1 ; i <= m ; i ++)
{
scanf("%d",&xh);
scanf("%d:%d:%d",&a[xh].h1,&a[xh].m1,&a[xh].s1);
scanf("%d:%d:%d",&a[xh].h2,&a[xh].m2,&a[xh].s2);
a[xh].ph += a[xh].h2 - a[xh].h1;
a[xh].pm += a[xh].m2 - a[xh].m1;
a[xh].ps += a[xh].s2 - a[xh].s1;
if(a[xh].ps >= 60)
{
//出现大于60的
a[xh].pm += 1;
a[xh].ps -= 60;
}
if(a[xh].pm >= 60)
{
//出现大于60的
a[xh].ph += 1;
a[xh].pm -= 60 ;
}
if(a[xh].pm < 0)
{
a[xh].pm += 60;
a[xh].ph -= 1;
}
if(a[xh].ps < 0)
{
a[xh].ps += 60;
a[xh].pm -= 1;
}
}
///找最大值
for(i = 0 ; i < n ; i ++)
{
a[i].total = a[i].ph*3600 + a[i].pm * 60 + a[i].ps;
//当时我的想法是一个个比较,
//但是不好比较如果小时和分钟一样就会出现错误
if(a[i].total > max)
{
//寻找最大值
max = a[i].total;
ci = i;
}
}
printf("快手狂人为: %03d %02d:%02d:%02d",ci,a[ci].ph, a[ci].pm , a[ci].ps);
/*注意这里要03d 我也不知道为啥
明明题目说两位数 输出前导0就好
*/
return 0;
}
/*
测试用例
3 5
001 04:12:40 04:41:33
000 16:42:03 16:49:27
002 05:14:50 05:37:52
000 04:13:30 04:37:49
000 12:00:15 12:08:46
(一般样例)
快手狂人为: 000 00:40:14
3 5
000 04:12:40 04:41:33
001 16:42:03 16:49:27
002 05:14:50 05:37:52
001 04:13:30 04:37:49
001 12:00:15 12:08:46
(不在000的最大值)
快手狂人为: 001 00:40:14
2 2
000 00:00:01 00:00:51
001 14:20:00 14:20:52
(0小时0分钟 只有秒钟)
快手狂人为:001 00:00:52
1 2
000 13:30:00 13:30:50
000 13:20:00 13:20:04
快手狂人为:000 00:00:54
2 3
000 11:00:30 12:00:00
001 11:00:00 12:00:00
000 01:00:02 01:00:52
快手狂人为:000 01:00:20
2 3
001 11:00:30 12:00:00
000 11:00:00 12:00:00
001 01:00:02 01:00:52
快手狂人为:001 00:01:20
1 1
000 01:30:12 02:30:12
快手狂人为:00 01:00:00
1 2
00 01:12:31 02:21:01
00 12:23:34 13:00:00
快手狂人为:00 01:44:56
2 4
00 11:12:30 12:01:40
01 12:07:01 12:30:55
00 13:01:20 15:30:20
01 15:00:00 18:00:00
(0 49 10)(2 29 0)
(0 23 54)(3 0 0)
快手达人为: 01 03:23:54
3 4
00 03:45:51 03:51:41
01 13:45:13 14:23:00
02 14:59:23 15:30:50
00 13:00:13 14:55:00
(0 5 50)
(0 37 47)
(0 32 27)
(1 54 47)
02:00:37
*/