网易2019实习生招聘编程题(牛牛的闹钟)

本文解析了一道关于计算最晚起床时间的算法题,通过将时间统一转换为分钟单位,利用排序和遍历的方法找到使主人公能够准时到达教室的最晚起床时间。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

###题目:
牛牛总是睡过头,所以他定了很多闹钟,只有在闹钟响的时候他才会醒过来并且决定起不起床。从他起床算起他需要X分钟到达教室,上课时间为当天的A时B分,请问他最晚可以什么时间起床
输入描述:

每个输入包含一个测试用例。
每个测试用例的第一行包含一个正整数,表示闹钟的数量N(N<=100)。
接下来的N行每行包含两个整数,表示这个闹钟响起的时间为Hi(0<=A<24)时Mi(0<=B<60)分。
接下来的一行包含一个整数,表示从起床算起他需要X(0<=X<=100)分钟到达教室。
接下来的一行包含两个整数,表示上课时间为A(0<=A<24)时B(0<=B<60)分。
数据保证至少有一个闹钟可以让牛牛及时到达教室。

输出描述:

输出两个整数表示牛牛最晚起床时间。

输入例子1:

3
5 0
6 0
7 0
59
6 59

输出例子1:

6 0

**解析:**本人认为这道题目考了大家的细心,题目中变量很多,很容易混淆。这道题目大家可以先把时和分全部转换成分,牛牛上课的时间减去他起床算起到教室花费的时间就是他应该起床的时间,我们设为time,time再减去闹铃的时间如果是大于等于0说明来得及,如果是小于0,说明牛牛要迟到了,因此我们要找的最晚起床的点就是time减去闹铃的时间大于等于0和小于0的分界点,当然还有一种情况就是time减去牛牛设的每一个闹钟全部都是大于等于0,那就取最晚设置的那个闹钟点。

#include<iostream>
#include<vector>
#include<algorithm>
#include<cmath>
using namespace std;
vector<int>V;
int main()
{
    int n;
    cin >>n;
    int Hi,Mi;
    //输入闹钟时间点,全部转换为分
    for(int i = 0;i<n;i++)
    {
        cin >>Hi>>Mi;
        V.push_back(Hi*60+Mi);
   }
    int x;
    cin >>x;
    int A,B;
    cin >>A>>B;
    sort(V.begin(),V.end());
    int time = A*60+B-x;
    if((time-V[n-1])>=0)
    {
        cout<<V[n-1]/60<<" ";
        cout<<V[n-1]%60;
    }
    //找出大于等于0与小于0的分界点
    for(int i = 1;i<n;i++)
    {
        if(time-V[i-1]>=0 && time-V[i]<0)
        {
            cout<<V[i-1]/60<<" ";
            cout<<V[i-1]%60;
        }
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值