1. 程式人生 > >2018年網易計算機視覺實習生筆試程式設計題

2018年網易計算機視覺實習生筆試程式設計題

牛牛總是睡過頭,所以他定了很多鬧鐘,只有在鬧鐘響的時候他才會醒過來並且決定起不起床。從他起床算起他需要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

【題目分析】:本題最重要的是不要把問題複雜化,昨天晚上做題的時候總是想的是小時是不是要轉化為分鐘,再去對映到原來的時分,但是問題就這樣被複雜化了,這個問題其實只要保證每個鬧鐘加上路上的時間,與到校時間最接近的就是需要的結果輸出便可以了。其中有一個技巧就是利用除法/取整,%取餘。再利用||,&&兩個符號,這題目自然迎刃而解了。這道題還總結了一個教訓,一定要學會利用cin,cout和scanf,printf這樣技巧也是會多次出現的,比如定義一個數字 int h[100],m[100],在其中輸入幾組時分,就是for(int i=0;i<N;i++)scanf("%d %d",&h[i],&m[i]);一句話就解決問題了。

#include<bits/stdc++.h>
using namespace std;
int h[105],m[105];
int main(){
    int N;
    scanf("%d",&N);
    for(int i=0;i<N;i++)scanf("%d %d",&h[i],&m[i]);
    int GoSchoolTime;
    scanf("%d",&GoSchoolTime);
    int atSchoolHour,atSchoolMin;
    scanf("%d%d",&atSchoolHour,&atSchoolMin);
    int ans1=0,ans2=0,temp1,temp2;
    for(int i=0;i<N;i++){
        temp2=m[i]+GoSchoolTime;
        temp1=h[i]+temp2/60;
        temp2=temp2%60;
        if(temp1<atSchoolHour||temp1==atSchoolHour&&temp2<=atSchoolMin){//限制到時間是小於上課時間的
            if(h[i]>ans1||(h[i]==ans1&&m[i]>ans2)){//找最接近的鬧鐘時間
                ans1=h[i];
                ans2=m[i];
            }
        }
    }

    printf("%d %d\n",ans1,ans2);
    return 0;
}