[C/C++]牛牛的闹钟 编程刷题

[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秒,就请你为我的文章点个赞吧!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值