题目:链接

题意

求出2022年中一共有多少个顺子日期,顺子指的是012,123,234,345……

思路

这道题目有以下几个难点:1、对于顺子的理解,一定是连续的并且从小到大的,像321,654这样的就不是题目所期望的;2、根据日期的特点,发现只可能出现含有123,012的顺子日期;3、如何找到日期中的123,012,关键在于数据如何存储,将整数转换成字符串,然后利用find函数。

心得

1、将数字转换成字符串:从低位到高位取余,修改ASCII,最后倒置。2、在主串中查找子串,利用find函数,如何判断是否找到,可以利用npos,它表示未找到,注意find函数的返回值是目标串第一个字母的位置。

代码

#include<bits/stdc++.h>
using namespace std;
int nums[]={0,31,28,31,30,31,30,31,31,30,31,30,31};

string To_string(int x)
{
    string s;
    while(x)
      s += x % 10 + '0', x /= 10;
    reverse(s.begin(),s.end());
    return s;
}

bool check(int year,int month,int day)
{
  string s = To_string(year);
  if(month < 10) s += '0';
  s += To_string(month);
  if(day < 10) s += '0';
  s += To_string(day);
  return (s.find("123") != s.npos || s.find("012") != s.npos);
}

int main()
{
    int ans = 0;
    for(int month = 1; month <= 12; month++)
    {
      for(int day = 1; day <= nums[month]; day++)
      {
        if(check(2022,month,day))
          ans++;
      }
    }
    cout<<ans<<'\n';
    return 0;
}