牛客小白月赛5-J-时间(time) (简单模拟)
题目描述
Apojacsleam是一个喜欢特殊时刻的人。
他定义了一个时刻,若电子表显示ab:ba(24小时制),则该时刻为“回文时刻”(可以有前导零)。例如00:00就是回文时刻。
给定一个时刻,求此时刻的上一个和下一个回文时刻。
J题附加:00:00就是24:00,没有24:00这一时刻
J题附加:输入可能有前导0,输出不含前导0,例如10:1的意思是10:01,而10:10的输出为10:10
输入描述:
两个正整数,用“:”隔开,表示小时和分钟,保证输入时间合法。
输出描述:
两行,两个时刻(不含前导0),用“:”隔开,表示上一个时刻和下一个时刻
示例1
输入
09:33
输出
5:50 10:1
示例2
输入
23:32
输出
22:22 0:0
解题思路:模拟一下正常时间走法即可找出给定时间的上一个和下一个回文时刻。
AC代码:
1 #include<bits/stdc++.h> 2 using namespace std; 3 int hh,mm,t,s; 4 int main(){ 5 while(~scanf("%d:%d",&hh,&mm)){ 6 t=hh,s=mm; 7 while(1){//找上一个回文时刻 8 s--; 9 if(s==-1){s=59;t--;}//s==0时,t还没改变,只有减为-1,则置s=59,t减1 10 if(t==-1)t=23;//t==0时,可以认做24时,实际没有这一时刻,当t==-1时重置t为23时 11 if(t==(s%10)*10+s/10){printf("%d:%d\n",t,s);break;} 12 } 13 t=hh,s=mm; 14 while(1){//找下一个回文时刻 15 s++; 16 if(s==60){s=0;t++;}//当s==60时,重置s=0,同时t加1 17 if(t==24)t=0;//当t为24时,由于没有24这一时刻,因此此时要重置t为0时 18 if(t==(s%10)*10+s/10){printf("%d:%d\n",t,s);break;} 19 } 20 } 21 return 0; 22 }