EOJ Monthly 2020.1

A.回文时间

 

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。
  • 题面:
寒假Day4: 随笔 第1张
A. 回文时间

单点时限: 1.0 sec     内存限制: 512 MB

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

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

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

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

保证他们约会的时间不可能晚于 99991231 日的 23:59:59 。

输入格式
输入数据包含一行一个整数 k ,表示要求的是之后的第 k 个回文时间。
保证对于给定的输入,输出的答案不会大于 99991231235959 ,即晚于 99991231 日的 23:59:59 。

输出格式
输出一行一个字符串表示答案。
View Code
  • 样例:
寒假Day4: 随笔 第3张
input
0
output
20200122100202

input
2
output
20200222200202
View Code
  • 这是我的错误的代码。

    题解说是模拟题,过了样例,没看出来哪错了。。

         我的思路:对于年份,把2020单独拿出来判断。其余数字进行两两进行范围判断,倒过来也必须是在时间范围之内0-59;

                   中间部分六位数只能在01 11 10、01 22 10、02 11 20、02 22 20里面选择,把它倒过来想一下就知道为什么只能在这四种条件里面进行取余判断了。

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 
 4 int a[8000];
 5 int x;
 6 void init()
 7 {
 8     x=1;
 9     for(int i=2021; i<=9595; i++)
10     {
11         int q=i%10*10+i/10%10;
12         int h=i/100%10*10+i/1000;
13         if(q>=0&&q<=59&&h>=0&&h<=59)
14             a[x++]=i;
15     }
16 }
17 
18 int main()
19 {
20     init();
21     int k;
22     while(~scanf("%d",&k))
23     {
24         if(k==0)
25             printf("20200122100202\n");
26         else if(k==1)
27             printf("20200211200202\n");
28         else if(k==2)
29             printf("20200222200202\n");
30         else
31         {
32             int w,y;
33             if(k<=2)
34                 printf("2020");
35             else
36             {
37                 w=(k-2)/4;
38                 if((k-2)%4!=0)
39                     w+=1;
40                 y=a[w];
41                 printf("%d",y);
42             }
43             w=(k-2)%4;
44             if(w==1)
45                 printf("011110");
46             else if(w==2)
47                 printf("012210");
48             else if(w==3)
49                 printf("021120");
50             else if(w==0)
51                 printf("022220");
52             if(k<=2)
53                 printf("0202");
54             else
55             {
56                 int b[5],o=0;
57                 while(y)
58                 {
59                     b[o++]=y%10;
60                     y/=10;
61                 }
62                 for(int i=0; i<o; i++)
63                     printf("%d",b[i]);
64                 printf("\n");
65             }
66         }
67     }
68     return 0;
69 }

 

 

TO DO LIST:

  • w 50+
  • EOJ*1
  • cfs*2
扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄