PTA 快手狂人 (50分)

快手是比較火的一款短視頻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
*/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章