• 寒假Day4:


    EOJ Monthly 2020.1

    A.回文时间

    • 题面:
    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
    • 样例:
    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
  • 相关阅读:
    Java学习:Scanner类
    Java学习:Object类
    js 方法
    ToDictionary
    goto
    删除多列同时重复数据
    linq中使用case when
    sql 学习笔记
    VS2012发布网站详细步骤
    由于权限不足而无法读取配置文件出现的HTTP 500.19解决办法
  • 原文地址:https://www.cnblogs.com/OFSHK/p/12207788.html
Copyright © 2020-2023  润新知