2018年網易計算機視覺實習生筆試程式設計題
阿新 • • 發佈:2019-01-08
牛牛總是睡過頭,所以他定了很多鬧鐘,只有在鬧鐘響的時候他才會醒過來並且決定起不起床。從他起床算起他需要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; }