题目
一天中,进入机房的人都有记录何时进,何时出。第一个进机房的人不关门,最后一个出机房的人关门。
目标:找出一天中谁不关门,谁关门
Sample Input
3
CS301111 15:30:28 17:00:10
SC3021234 08:00:00 11:25:25
CS301133 21:45:00 21:58:40
Sample Output
SC3021234 CS301133
解法
法一:C++
思路:
就是比较时间的大小嘛,或者说对时间排序,最后找出最大的和最小的。
在刚开始的时候想存储int时分秒这样来判断,通过时间优先级,时>分>秒。
源代码:
#include <iostream>
#include <cstdio>
#include <math.h>
#include<vector>
#include <string.h>
#include <sstream>
using namespace std;
int main() {
int num;
scanf("%d",&num);
string id_number = "";
int inh,inm,ins,outh,outm,outs;
int maxh,maxm,maxs,minh,minm,mins;
maxh=maxm=maxs=0;
minh=minm=mins=999;
string unlockone,lockone;
for(int i=0;i<num;i++){
cin>>id_number;
scanf("%d:%d:%d %d:%d:%d",&inh,&inm,&ins,&outh,&outm,&outs);
if(inh<minh){
minh = inh;
unlockone = id_number;
}
else if(inh == minh && inm<minm){
minm = inm;
unlockone = id_number;
}
else if(inh == minh && inm == minm && ins<mins){
mins = ins;
unlockone = id_number;
}
if(outh>maxh){
maxh = outh;
lockone = id_number;
}
else if(outh == minh && outm>minm){
maxm = outm;
lockone = id_number;
}
else if(outh == minh && outm == minm && outs>mins){
maxs = outs;
lockone = id_number;
}
}
//printf("%s %s",unlockone.c_str(),lockone.c_str()); //非要用printf输出的话,要加.c_str().
cout<<unlockone<<" "<<lockone<<endl;//注意格式,中间有个空格!
return 0;
}
法二:C++
思路:
法一是原创的,但是发现用if...else...判断的代码看起来有点长,所以去参考了柳神的代码思路。
她是将时间都转换为总秒数,然后进行时间的比较的。
源代码:
#include <iostream>
#include <cstdio>
#include <math.h>
#include<vector>
#include <string.h>
#include <sstream>
using namespace std;
int main() {
int num;
scanf("%d",&num);
string id_number = "";
int inh,inm,ins,outh,outm,outs;
int max=0,min=9999999;
int tempin=0,tempout=0;
string unlockone,lockone;
for(int i=0;i<num;i++){
cin>>id_number;
scanf("%d:%d:%d %d:%d:%d",&inh,&inm,&ins,&outh,&outm,&outs);
tempin = inh * 3600 + inm * 60 + ins;
tempout = outh * 3600 + outm * 60 + outs;
if(tempin < min){
unlockone = id_number;
min = tempin;
}
if(tempout > max){
lockone = id_number;
max = tempout;
}
}
cout<<unlockone<<" "<<lockone<<endl;
return 0;
}
知识点+坑:
-
string的输入
(刚开始用scanf+%s,这是不行的。因为c中没有string类,而c++中有,所以用cin)
cin>>输入的string;
2.在用法二的时候,要注意min的值,太小的话就不行了。
网友评论