PTA 快手狂人 (50分)

2020/11/30 11:00
阅读数 2.8K

快手是比较火的一款短视频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
*/

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部