蓝桥杯2020--回文日期

简介: 蓝桥杯2020--回文日期

20210317121435982.png

20210317121544794.png


解题思路

  1. 采用暴力和枚举的方法进行处理,先判断是否满足回文,如果满足再判断是否是ABAB类型,如果是则找到了结果.
  2. 处理时,第一次需要从输入日期的后一天开始进行判断

代码


#include<iostream>
#include<string>
using namespace std;
string s;
int year, month, day;
int month1, day1;
int months[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
bool flag1 = false, flag = true;//flag :判断是否是第一次循环   flag1: 判断是否找到回文 
bool solve1(string s)//判断回文的方法 
{
  for (int i = 0; i <= s.size() / 2; i++) {
    if (s[i] != s[s.size() - i - 1])
    {
      return false;
    }
  }
  return true;
}
bool solve2(string s) {//判断是否是ABAB类型的 
  if (s[0] == s[2] && s[1] == s[3]) {
    return true;
  }
  return false;
}
void solve(string s)// 处理问题的方法 
{
  year = stoll(s.substr(0, 4));
  month = stoll(s.substr(4, 2));
  day = stoll(s.substr(6, 2));
  //
  for (int i = year; i; i++)//年 
  {
    if ((i % 4 == 0 && i % 100 != 0) || (i % 400 == 0))
    {
      months[2] = 29;
    }
    else
    {
      months[2] = 28;
    }
    if (flag) {
      month1 = month;
      day1 = day + 1;
      flag = false;
    }else {
      month1 = 1;
      day1 = 1;
    }
    for (int j = month1; j <= 12; j++)//月 
    {
      for (int k = day1; k <= months[j]; k++)
      {
        s = to_string(i);
        if (j < 10)
        {
          s += "0" + to_string(j);
        }
        else {
          s += to_string(j);
        }
        if (k < 10) {
          s += "0" + to_string(k);
        }
        else {
          s += to_string(k);
        }
        //cout << s << endl;
        if (solve1(s))//判断是否是回文 
        {
          //cout << s << endl;
          if (!flag1)//如果还没找到,则这个就是最近的那个 
          {
            cout << s << endl;
            flag1 = true;
          }
          if (solve2(s)) {//判断是否是ABAB类型的回文日期 
            cout << s << endl;
            return;
          }
        }
      }
    }
  }
}
int main()
{
  cin >> s;
  solve(s);
  return 0;
}


总结

C++11 中提供了许多方便的函数,比如 整形转换成字符串 to_string(),字符串转换成整形 stoll().这些使用起来还是很方便的.另外字符串只能和字符串用 + 做拼接,如果两边一边一个整数一边一个字符串类型则会出错.

相关文章
|
2月前
蓝桥杯真题time模块详解 | 顺子日期 星期一
蓝桥杯真题time模块详解 | 顺子日期 星期一
|
6月前
|
Java
2021蓝桥杯大赛软件类国赛Java大学B组 完全日期 复杂遍历搜索
2021蓝桥杯大赛软件类国赛Java大学B组 完全日期 复杂遍历搜索
51 2
|
7月前
|
C++
第十三届蓝桥杯B组C++(试题B:顺子日期)
第十三届蓝桥杯B组C++(试题B:顺子日期)
87 0
【蓝桥杯冲刺】日期类专题特训
【蓝桥杯冲刺】日期类专题特训
46 0
|
C++
第十一届蓝桥杯省赛 C++ B组 - 回文日期
第十一届蓝桥杯省赛 C++ B组 - 回文日期
73 0
|
机器学习/深度学习 测试技术
[蓝桥杯 2020 省 AB2] 回文日期
[蓝桥杯 2020 省 AB2] 回文日期
105 0
[蓝桥杯 2017 省 B] 日期问题
[蓝桥杯 2017 省 B] 日期问题
89 0
题目 2571: 蓝桥杯2020年第十一届省赛真题-回文日期
题目 2571: 蓝桥杯2020年第十一届省赛真题-回文日期
|
Java 测试技术 C语言
【蓝桥杯基础题】2020年省赛填空题—回文日期
【蓝桥杯基础题】2020年省赛填空题—回文日期
【蓝桥杯基础题】2020年省赛填空题—回文日期
第14届蓝桥杯第三次模拟赛:3日期相等
第14届蓝桥杯第三次模拟赛:3日期相等
101 0