牛客小白月赛5 J-时间 C++

链接:https://www.nowcoder.com/acm/contest/135/J
来源:牛客网
 

题目描述

         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

思路:

判断来判断去不如打个表来得快。

代码:

#include<iostream>
#include<cstdio>
#include<map>
using namespace std;
map<int,int> m;
int main()
{
m[1]=10;
m[2]=20;
m[3]=30;
m[4]=40;
m[5]=50;
m[10]=1;
m[11]=11;
m[12]=21;
m[13]=31;
m[14]=41;
m[15]=51;
m[20]=2;
m[21]=12;
m[22]=22;
m[23]=32;
m[0]=0;
    int a,b;
    while(scanf("%d:%d",&a,&b)!=EOF){
    if(m.count(a)){
        if(b>m[a])
        {
            printf("%d:%d\n",a,m[a]);
            int i=1;
            while(!m.count((a+i)%24))
            {
                i++;
            }
            printf("%d:%d\n",(a+i)%24,m[(a+i)%24]);
        }
        else if(b<m[a])
        {
            int i=1;
            while(!m.count(a-i))
            {
                i++;
            }
            printf("%d:%d\n",a-i,m[a-i]);
            printf("%d:%d\n",a,m[a]);
        }
        else{
            int i=1;
            while(!m.count(a-i))
            {
                i++;
            }
            printf("%d:%d\n",a-i,m[a-i]);
            i=1;
            while(!m.count((a+i)%24))
            {
                i++;
            }
            printf("%d:%d\n",(a+i)%24,m[(a+i)%24]);
        }
    }
    if(!m.count(a))
    {
        int i=1;
            while(!m.count(a-i))
            {
                i++;
            }
            printf("%d:%d\n",a-i,m[a-i]);
            i=1;
            while(!m.count(a+i))
            {
                i++;
            }
            printf("%d:%d\n",a+i,m[a+i]);
    }}
    return 0;
}

猜你喜欢

转载自blog.csdn.net/zero_979/article/details/81163392
今日推荐