PAT1006 Sign In and Sign Out
题目:PAT甲级1006
题解:看起来是一道非常水的题,就先比小时,小时相等比分钟,分钟相等比秒数,这样一级一级比。
然而这个思路写代码感觉有点麻烦..以至于被一些不知名的小错误折腾了好久...
有空去看看有没有大佬写的思路简单的代码..
代码:
1 #include<cstdio> 2 #include<iostream> 3 #define maxn 9999 4 using namespace std; 5 6 int n; 7 string id[maxn],s_id,v_id; 8 int hh[2][maxn],mm[2][maxn],ss[2][maxn],smin,vmax; 9 10 int main() 11 { 12 scanf("%d",&n); 13 14 for(int i=0;i<n;i++) 15 { 16 cin>>id[i]; 17 scanf("%d:%d:%d %d:%d:%d",&hh[0][i],&mm[0][i],&ss[0][i],&hh[1][i],&mm[1][i],&ss[1][i]); 18 } 19 20 21 bool f1=false;bool f2=false;//f1标记是否找到最早的时间,f2标记是否找到最晚的时间 22 for(int t=0;t<3&&!(f1&&f2);t++) 23 { 24 if(t==0){smin=hh[0][0];vmax=hh[1][0];s_id=id[0];v_id=id[0];}//进行初始化 25 else if(t==1){if(!f1) smin=mm[0][0];if(!f2) vmax=mm[1][0];}//如果没有找到最早或最晚的时间,对下一级初始化 26 else if(t==2){if(!f1) smin=ss[0][0];if(!f2) vmax=ss[1][0];}//同上 27 28 for(int i=1;i<n;i++) 29 { 30 if(t==0)//比较小时 31 { 32 if(hh[0][i]<smin) 33 { 34 smin=hh[0][i]; 35 s_id=id[i]; 36 f1=true; 37 } 38 if(hh[1][i]>vmax) 39 { 40 vmax=hh[1][i]; 41 v_id=id[i]; 42 f2=true; 43 } 44 } 45 else if(t==1)//比较分钟 46 { 47 if(mm[0][i]<smin&&!f1) 48 { 49 smin=mm[0][i]; 50 s_id=id[i]; 51 f1=true; 52 } 53 if(mm[1][i]>vmax&&!f2) 54 { 55 vmax=mm[1][i]; 56 v_id=id[i]; 57 f2=true; 58 } 59 } 60 else if(t==2)//比较秒数 61 { 62 if(ss[0][i]<smin&&!f1) 63 { 64 smin=ss[0][i]; 65 s_id=id[i]; 66 f1=true; 67 } 68 if(ss[1][i]>vmax&&!f2) 69 { 70 vmax=ss[1][i]; 71 v_id=id[i]; 72 f2=true; 73 } 74 } 75 76 } 77 } 78 79 cout<<s_id<<" "<<v_id; 80 81 return 0; 82 }
浙公网安备 33010602011771号