EOJ Monthly 2020.1 A.回文时间

题目请参考***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

先说思路:
①第七位第八位是月份,且这两位对称,也就只有11号和22号符合要求。
②而第五第六是月份,第九第十位是几点,这四位应该对称,符合要求的有:01月与10点,02月与20点,
10月与01点,11月与11点,12月与21点。
综合①②,也就是一年10种情况
③前四位与后四位分别是年份与分秒,此处的限制条件是分和秒小于60,也就是年份的百位和个位最大为5
下面是我写的代码:

#include<stdio.h>
#include<math.h>
#include<string.h>
int main() {
    int n,i;
    char a[20],b[20];
    int k,j=-1;
    scanf("%d",&k);
    for(i=2020;; i++) {
        memset(a,0,sizeof(a));
        sprintf(a,"%d",i);
        if(a[1]<'6'&&a[3]<'6')
            j+=10;
        if(j>=k)
            break;
    }
    int x=k%10;
    if(x == 9) {
        memset(a,0,sizeof(a));
        sprintf(a,"%d",i+1);
        printf("%d011110",i+1);
        for(int o=3; o>=0; o--)
            printf("%c",a[o]);
    }
    else if(x == 0) {
        printf("%d012210",i);
        for(int o=3; o>=0; o--)
            printf("%c",a[o]);
    }
    else if(x == 1) {
        printf("%d021120",i);
        for(int o=3; o>=0; o--)
            printf("%c",a[o]);
    }
    else if(x == 2) {
        printf("%d022220",i);
        for(int o=3; o>=0; o--)
            printf("%c",a[o]);
    }
    else if( x == 3 ) {
        printf("%d101101",i);
        for( int o=3; o >= 0; o--)
            printf("%c",a[o]);
    }
    else if( x == 4 ) {
        printf("%d102201",i);
        for(int o=3; o>=0; o--)
            printf("%c",a[o]);
    }
    else if(x == 5) {
        printf("%d111111",i);
        for(int o=3; o>=0; o--)
            printf("%c",a[o]);
    }
    else if(x == 6) {
        printf("%d112211",i);
        for(int o=3; o>=0; o--)
            printf("%c",a[o]);
    }
    else if(x == 7) {
        printf("%d121121",i);
        for(int o=3; o>=0; o--)
            printf("%c",a[o]);
    }
    else if(x==8) {
        printf("%d122221",i);
        for(int o=3; o>=0; o--)
            printf("%c",a[o]);
    }
    return 0;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值