L1-6 你今天刷快手了吗

一、题目:

在这里插入图片描述

二、解题思路:

1.首先对于这道题目:我们最先想到的使用:
结构体数组来实现:
定义一个h、m、s分别存储对应的时分秒,id存储学号
2.对结构体数组进行初始化
3.定义一个bool类型的b数组(题目说有全班n位同学,有m条数据,这m条数据是看过快手的同学,而如果没有看快手的同学就没有数据,但是对这些没有看快手的同学也需要处理,输出)
4.接着在main()函数中,根据题目的输入要求编写输入的相关代码(具体看下面代码)
要注意的是:对于时间类的输入,使用scanf函数来比较容易,毕竟有个:,而且输出时也比较容易;
对于计算每个人的观看时间:统一化成来进行比较,这样简单了很多
5.然后是输出的准备工作:利用化成秒数来进行计算;
6.最后是输出(要注意有“没有看过快手的输出”这种特殊情况)

三、编写代码:

#include<bits/stdc++.h>
#include <cstdio>
#include<cstdlib>
#include<map>
using namespace std;
struct no
{
    int h,m,s,t;
    int id;
}arr[10001];
bool b[1001];//用来记录是否看过快手,因为没看过不会输入时间的
bool cmp(no x,no y)
{
    if(x.t == y.t) return x.id < y.id;
    else return x.t > y.t;
}
int main()
{
    memset(b,false,sizeof(b));//全部初始化为false
    //初始化所有人
    for(int i = 0; i < 1001; i++)
    {
        arr[i].h = arr[i].m = arr[i].s = arr[i].t = 0;
        arr[i].id = i;
    }
    int n,m;
    int num;
    int h1,m1,s1,h2,m2,s2;
    int t,t1,t2;
    cin >> n >> m;
    for(int i = 0; i < m; i++)
    {
        scanf("%d %d:%d:%d %d:%d:%d",&num,&h1,&m1,&s1,&h2,&m2,&s2);
        b[num] = true;//记录看过快手的人
        arr[num].id = num;
        t1 = h1*3600 + m1*60 + s1;
        t2 = h2*3600 + m2*60 + s2;
        arr[num].t += t2 - t1;//一共看了多少时间
    }
    sort(arr,arr+n,cmp);
    //输出内容的准备工作
    for(num = 0; num < n; num++)
    {
        t = arr[num].t;
        arr[num].h += t/3600;//时
        t -= t/3600 * 3600;//减去小时的秒
        arr[num].m += t/60;//分
        t -= t/60 *60;
        arr[num].s += t;//秒
        if(arr[num].s >= 60)
        {
            arr[num].m += arr[num].s / 60;
            arr[num].s -= arr[num].s % 60;
        }
    }
    //输出
    for(int i = 0; i < n; i++)
    {
        if(b[arr[i].id]==false)//没有看过快手的输出
            printf("%03d 00:00:00\n",arr[i].id);
        else
            printf("%03d %02d:%02d:%02d\n",arr[i].id,arr[i].h,arr[i].m,arr[i].s);
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值