回文数

回文数:回文数即正反读都是相同的数,如151、12321等,注意,个位数与0也是回文数。

例题:
回文时间(题目链接https://acm.ecnu.edu.cn/contest/247/problem/A/

Cuber QQ 很惊奇地发现 2020 年 1 月 22的 10:02:02 构成的字符串竟然是一个回文串。(构成的字符串是 20200122100202 ),这下又有充足的理由约女神吃饭了。

可是这之后,女神开始为难 Cuber QQ 了。她现在只允许 Cuber QQ 在回文时间约她吃饭。

回文时间指的是,年份(四位数字构成)+月份(两位数字构成)+日期(两位数字构成)+小时(两位数字构成)+分钟(两位数字构成)+秒(两位数字构成)所形成的字符串是一个回文字符串。其中时间的表示形式是 24 小时制,例如下午 01:02 表示为 13:02 。

于是 Cuber QQ 开始期待之后的约会了。他现在想知道 2020 年 1 月 22 日的 10:02:02 之后第 k 个回文时间是多少(特别地,之后第 0 个回文时间就是 20200122100202 )。

保证他们约会的时间不可能晚于 9999 年 12 月 31 日的 23:59:59 。

输入格式
输入数据包含一行一个整数 k ,表示要求的是之后的第 k 个回文时间。

保证对于给定的输入,输出的答案不会大于 99991231235959 ,即晚于 9999 年 12 月 31 日的 23:59:59 。

输出格式
输出一行一个字符串表示答案。
样例
input
0
output
20200122100202
input
2
output
20200222200202

代码

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstring>
using namespace std;
int month[6] = {0,1,2,10,11,12};
int date[3] = {0,11,22};
struct ans
{
    int year;
    int month;
    int date;
    int hour;
    int minute;
    int second;
}f[30000];
int main()
{
    int k;
    cin >> k;
    int t=1;
    for(int i = 2020; i <= 9999; i ++)
    {
        int a = i;
        int b = a % 100;
        int minute = (b%10) * 10 + (b/10);
        if(minute >= 0 && minute <= 59)
        {
            int c = a / 100;
            int second = (c%10) * 10 + (c/10);
            if(second >= 0 && second <= 59)
            {
                for(int p = 1;p <= 5;p ++)
                {
                    for(int w = 1;w <= 2;w ++)
                    {
                        f[t].year = a;
                        f[t].month = month[p];
                        f[t].date = date[w];
                        f[t].hour = f[t].month/10 + (f[t].month%10) * 10;
                        f[t].minute = minute;
                        f[t].second = second;
                        t ++;
                    }
                }
            }
        }
    }
    printf("%d%02d%02d%02d%02d%02d\n",f[k+2].year,f[k+2].month,f[k+2].date,f[k+2].hour,f[k+2].minute,f[k+2].second);
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值