题目:链接
题意
求出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;
}