问题描述
小明特别喜欢顺子。顺子指的就是连续的三个数字:123、456 等。顺子日期指的就是在日期的 yyyymmdd 表示法中,存在任意连续的三位数是一个顺子的日期。例如 20220123 就是一个顺子日期,因为它出现了一个顺子:123; 而 20221023 则不是一个顺子日期,它一个顺子也没有。小明想知道在整个 2022 年份中,一共有多少个顺子日期?
运行限制
- 最大运行时间:1s
- 最大运行内存: 512M
题解
分析:
1.定义三个变量分别表示天数(day),月数(month),和顺子日期个数(ans),定义一个整型数组dayinmonth表示每个月分的天数。
int day,month,ans=0;
int dayinmonth[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
2.使用枚举,将所有日期遍历,寻找符合要求的日期,及顺子日期。
为了方便计算日期的每一位数字的关系,创建一个整型date数组存储每一位数字,然后遍历这个数组,当满足三个连续的数字为顺子时,ans+1。
for (month=1;month<13;month++){
for (day=1;day<dayinmonth[month];day++){
int date[4]={month/10,month%10,day/10,day%10};
for(int i=0;i<4;i++){
if(date[i]+2==date[i+1]+1&&date[i+1]+1==date[i+2]){
ans++;
}
}
}
}
3.输出总个数。
printf("%d",ans);
完整代码:
#include <iostream>
using namespace std;
int main()
{
int day,month,ans=0;
int dayinmonth[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
for (month=1;month<13;month++){
for (day=1;day<dayinmonth[month];day++){
int date[4]={month/10,month%10,day/10,day%10};
for(int i=0;i<4;i++){
if(date[i]+2==date[i+1]+1&&date[i+1]+1==date[i+2]){
ans++;
}
}
}
}
printf("%d",ans);
return 0;
}
-------------来自蓝桥杯2022年十三届省赛大学B组