[C/C++]牛牛的闹钟 编程刷题
参考链接
题目描述
牛牛总是睡过头,所以他定了很多闹钟,只有在闹钟响的时候他才会醒过来并且决定起不起床。从他起床算起他需要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
输出例子:
6 0
思路:
- 这道题我一开始想的是用二维数组去存储题目中的小时和分钟,但是一下忘记c++的动态创建二维数组怎么写了,因此用了简单的方法,其实应该也是本题想要的写法,用分钟存储所有的闹钟时间,即:闹钟6:40,就存为6 X 60 + 40 = 400 分钟,输出的时候就反操作一次,400 / 60 = 6 小时, 400 % 60 = 40 分钟。这样就可以用一维数组处理这些闹钟时间了。
- 本题还有一个坑,就是闹钟的时间,每个闹钟不一定是按照时间的顺序输入的,比如:输入的闹钟时间可能是:7:00 -> 9:00 -> 6:40 。因此我们需要把闹钟按照从早到晚的顺序进行排序,即 6:40 -> 7:00 -> 9:00 。然后把上课时间 - 起床时间的最晚结果在数组中找到就可以。
“just show my code”
代码(c++/c)
#include<iostream>
using namespace std;
void sortClock(int *p,int size){ // 直接插入排序
for(int i = 1;i < size;i++){
int temp = p[i];
int j = i;
while(p[j-1] > temp && j > 0 ){
p[j] = p[j-1];
j--;
}
p[j] = temp;
}
}
int main(){
int N; // 闹钟个数
cin >> N;
int *clock = new int[N];
for (int i = 0 ;i < N ; i++){
int H,M;
cin >> H >> M ;
clock[i] = H * 60 + M ;
//cout<<clock[i]<<endl;
}
int arr_time; // 到达教室的时长
cin >> arr_time;
int start_H, start_M; //开始上课的时间
cin >> start_H >> start_M ;
int start_time = start_H * 60 + start_M ;
sortClock(clock,N);
int getUp_H = clock[N-1] / 60;
int getUp_M = clock[N-1] % 60;
for (int i = 0 ;i < N-1 ; i++){
if(start_time - clock[i] >= arr_time && start_time - clock[i+1] < arr_time){
getUp_H = clock[i] / 60;
getUp_M = clock[i] % 60;
}
}
cout<< getUp_H << " " << getUp_M<< endl;
}
如果我的文章能帮你节约20秒,就请你为我的文章点个赞吧!