题目描述:
/** 牛牛总是睡过头,所以他定了很多闹钟,只有在闹钟响的时候他才会醒过来并且决定起不起床。 从他起床算起他需要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 */思路描述:
//只要找最接近死线且最晚的时间即可 //这里假设都是牛牛闹钟设定的时间都是与到达教室的deadLine是同一天的,并且同一天到达教室 //换算成分钟代码如下:
#include<stdio.h> #include<iostream> #define MAX_N 105 using namespace std; //只要找最接近死线且最晚的时间即可 //这里假设都是牛牛闹钟设定的时间都是与到达教室的deadLine是同一天的,并且同一天到达教室 //换算成分钟 int moments[MAX_N]; int main() { int N; int h, m; scanf("%d", &N); for(int i=0; i<N; i++) { scanf("%d%d", &h, &m); moments[i]=h*60+m; } int cost; scanf("%d", &cost); int deadLine; scanf("%d%d", &h, &m); deadLine=h*60+m-cost; if(deadLine<0) { //前一天起来第二天到教室的情况假设是不存在的 //假设闹钟的设定和最晚到达教室的时间都在同一天 return -1; } else { int res=-1; //找出moments中最接近deadLine且最晚的时间 for(int i=0; i<N; i++) { if(moments[i]<=deadLine && moments[i]>res) { res=moments[i]; } } h=res/60; m=res`; printf("%d %d", h, m); } return 0; }