回文时间(山东省理工OJ)

回文时间(山东理工OJ)
题目描述
HH 每天都会熬夜写代码,然后很晚才睡觉,但是每天早晨六点多必须要刷卡出宿舍,这就导致了必须在某些课上睡一会才能保证充沛的体力,当然某些重要的课是不能睡掉的,而某些课是可以睡的,比如《中国传统文化》,但是睡觉是不能被老师发现的,否则......他会以让你重修两年来威胁你。已知老师会在电子表上显示的时间为回文(例如:15:51)的时候来检查有没有人在睡觉,所以必须要在那个时间之前醒来。现在,给出 HH 开始睡觉的时间,你要帮她计算出下一个回文时间。
输入
输入包含多组测试数据,对于每组测试数据:
输入只有一行为一个字符串,字符串格式为"HH:MM",HH 和 MM 都为两位数字(00 ≤ HH ≤ 23, 00 ≤ MM ≤ 59)。
输出
对于每组测试数据,输出只有一行为下一个回文时间。
示例输入
12:21
23:59
示例输出
13:31
00:00
#include<stdio.h>
#include<string.h>
int main(void)
{
    int h,m;
    while(~scanf("%d:%d",&h,&m))
    {
        if(h==5&&50<=m&&m<=59)
          printf("10:01\n");
        else if(h==15&&51<=m&&m<=59)
          printf("20:02\n");
        else if(h==23&&32<=m&&m<=59)
          printf("00:00\n");
        else if(0<=h&&h<6)
          if(h*10>m)
            printf("%02d:%02d\n",h,h*10);
          else
              printf("%02d:%02d\n",h+1,(h+1)*10);
        else if(6<=h&&h<=9)
          printf("%02d:%02d\n",10,01);
        else if(10<=h&&h<16)
               if(h%10*10+1>m)
                 printf("%02d:%02d\n",h,h%10*10+1);
               else
                 printf("%02d:%02d\n",h+1,(h+1)%10*10+1);
        else if(16<=h&&h<=19)
               printf("%02d:%02d\n",20,02);
        else if(20<=h&&h<24)
               if(h%10*10+2>m)
                 printf("%02d:%02d\n",h,h%10*10+2);
               else
                 printf("%02d:%02d\n",h+1,(h+1)%10*10+2);
    }
    return 0;
}
/**************************************
	Problem id	: SDUT OJ 2174 
	User name	: 李俊 
	Result		: Accepted 
	Take Memory	: 280K 
	Take Time	: 0MS 
	Submit Time	: 2013-08-10 21:49:22  
**************************************/