首页 > 试题广场 >

牛牛的闹钟

[编程题]牛牛的闹钟
  • 热度指数:558 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
牛牛总是睡过头,所以他定了很多闹钟,只有在闹钟响的时候他才会醒过来并且决定起不起床。从他起床算起他需要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
#include <iostream>

using namespace std;
const int N = 110;
int n, a[N], b, c, x, y, ans;

int main()
{
    cin >> n;
    for (int i = 0; i < n; i++)
    {
        cin >> x >> y;
        a[i] = x * 60 + y;
    }
    cin >> b >> x >> y;
    c = x * 60 + y;
    for (int i = 0; i < n; i++)
        if (a[i] + b <= c && a[i] > ans)
            ans = a[i];
    cout << ans / 60 << ' ' << ans % 60;
    return 0;
}
编辑于 2018-07-12 22:49:50 回复(0)
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int count = Integer.valueOf(in.nextLine().replace(" ",""));
        List<Integer> timeslist = new ArrayList(count);
        while(count--!=0){
            int h = in.nextInt();
            int m = in.nextInt();
            int min = h*60+m;
            timeslist.add(min);
        }
        int to_school_time = in.nextInt();
        int h = in.nextInt();
        int m = in.nextInt();
        int lean_time = h*60+m;
        int last_time = lean_time - to_school_time;
        int max = 0;
        for(int t : timeslist){
            if(t<=last_time && t>=max){
                max = t;
            }
        }
        int h_last = max/60;
        int m_last = max%60;
        System.out.println(h_last+" "+m_last);
    }
}
发表于 2018-06-02 21:00:11 回复(0)
import java.util.*;


public class Main {
    public static void main(String[] args) {

         Scanner scan = new Scanner(System.in);
        int N = scan.nextInt();
        int []total=new int[N];
        for (int i = 0; i < N; i++) {
           // alarms.add(new Alarm(scan.nextInt(), scan.nextInt()));
            total[i]=scan.nextInt()*60+ scan.nextInt();
        }
        int X = scan.nextInt();
        int A = scan.nextInt(), B = scan.nextInt();
        int time = (A * 60 + B) - X;
        int max=0;
        for (int i = 0; i < N; i++) {

           if (total[i]<=time&&total[i]>max){
               max=total[i];
           }
        }

        System.out.println(max/60 + " " + max%60);

    }


}


发表于 2019-08-12 00:25:14 回复(2)
import operator
numofclock = int(input())
clocks = []
for i in range(numofclock):
    imp = input().split()
    clocks.append((int(imp[0]),int(imp[1])))
clocks = sorted(clocks, key= operator.itemgetter(0, 1),reverse=True)
cost = int(input())
ddl = input().split()
# print(clocks, cost, ddl)
for t in clocks:
    nm = (int(t[1]) + cost) % 60
    nh = (int(t[0]) + ((int(t[1]) + cost) // 60))
    if nh < int(ddl[0]) or (nh == int(ddl[0]) and nm <= int(ddl[1])):
        print(t[0],t[1])
        break

1.输入处理的时候,类型要一并处理了,不然排序的时候会出现问题

发表于 2019-08-11 21:18:08 回复(0)
import java.util.ArrayList;
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        int time = 24 * 60;
        int r=0;
        Scanner scanner = new Scanner(System.in);
        // 测试的数据个数
        while(scanner.hasNextLine()) {
            String n = scanner.nextLine();
            ArrayList<String> list=new ArrayList<String>();
            for(int i=0;i<Integer.parseInt(n);i++) {
            list.add(scanner.nextLine());
            }
            String p= scanner.nextLine();
            String sk=scanner.nextLine();
          

            int period = Integer.parseInt(p);  
            String[] k = sk.split(" ");
            int timeMax=Integer.parseInt(k[0]) * 60 + Integer.parseInt(k[1]);
         
            for (int i = 0; i < list.size(); i++) {
                String[] hm = list.get(i).split(" ");
                int h = Integer.parseInt(hm[0]);
                int m = Integer.parseInt(hm[1]);
                int timei = h * 60 + m;
                if (timei <= timeMax) {
                    int pp = timeMax-timei;
                    if (pp >= period) {
                        if (pp <= time) {
                            time = pp;
                            r=timei;
                        }
                    }
                }
            }
            System.out.println(String.valueOf(r / 60) + " " + String.valueOf(r % 60));

        }                    
    }
}

发表于 2019-04-19 19:07:38 回复(0)
# coding:utf-8
# python3.5
# 处理输入数据
clocks = int(input())
arr = []
for i in range(clocks):
    tmp = input().split()
    line = list(map(int, tmp))
    arr.append(line[0]*60+line[1])
tArrive = int(input())
tClassList = list(map(int, input().split()))
tClass = tClassList[0]*60 + tClassList[1]
result = 0
# 遍历数组,如遇到满足时间约束且比当前结果更大的数则更新结果
for i in range(0, len(arr)):
    if arr[i] + tArrive <= tClass and arr[i] > result:
        result = arr[i]
hour = result // 60
mins = result % 60
print(hour, mins)
编辑于 2018-08-08 21:09:24 回复(0)
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main() {
    int n = 0;
    while(cin >> n) {
        vector<int> vec;
        vec.reserve(n);
        for(int i = 0; i < n; ++i) {
            int hour = 0,min = 0;
            cin >> hour >> min;
            auto to_min = 60 * hour + min;
            vec.emplace_back(to_min);
        }
        sort(vec.begin(),vec.end());
        int onRoad = 0;
        cin>>onRoad;
        int start_hour = 0,start_min = 0;
        cin >> start_hour >> start_min;
        auto to_start_min = 60 * start_hour + start_min;
        int i = vec.size();
        for(auto itor = vec.crbegin(); itor != vec.crend(); ++itor) {
            --i;
            if(*itor <= to_start_min - onRoad) break;
        }
        
        auto theone = vec[i];
        auto h = theone / 60;
        auto m = theone - 60 * h;
        
        cout<<h<<' '<<m<<endl;
    }
}

发表于 2018-06-15 16:57:59 回复(0)