【题目描述】
小明特别喜欢顺子。顺子指的就是连续的三个数字:123、456 等。顺子日期指的就是在日期的yyyymmdd 表示法中,存在任意连续的三位数是一个顺子的日期。例如20220123 就是一个顺子日期,因为它出现了一个顺子:123。本题顺子的定义:ijk 是 一个顺子,满足 i+1=j、j+1=k、i≥0。而20221023 则 不是一个顺子日期,它一个顺子也没有。小明想知道 在整个2022年份中,一共有多少个顺子日期。 这是一道结果填空的题,你只需要算出结果后提交即 可。本题的结果为一个整数,在提交答案时只输出这 个整数,输出多余的内容将无法得分。
【解题步骤】
本题2022年的日期要出现顺子,首先排除和年份做顺子的情况,因为月份第一个数字只能是0或1,所以只要考虑月份和日做顺子的情况。不考虑年份,一共有四位数,要么是前三位顺子,要么是后三位顺子枚举的时候第二位数一定比第三位数小1。枚举完后判断合法性就可以了。
//方法一
#include<bits\stdc++.h>
using namespace std;
int main(){
int mth;
int s[10];
int sum=0;
for(int i=1;i<=12;i++){//月
if(i==2){
mth=28;
}
if(i==1||i==3||i==5||i==7||i==8||i==10||i==12){
mth=31;
}
else mth=30;
for(int j=1;j<=mth;j++){//日
s[0]=i/10;//十位
s[1]=i%10;//个位
s[2]=j/10;//十位
s[3]=j%10;//个位
// cout<<s[0]<<s[1]<<s[2]<<s[3]<<endl;/*自行检测发现已经把2022年所有日子遍历出来*/
if(s[0]+1==s[1]&&s[1]+1==s[2]||s[1]+1==s[2]&&s[2]+1==s[3]){//条件筛选:不是前面三个是顺子,就是后面三个是顺子。而且这样只遍历一遍不会导致0123被记录两次。
sum++;
}
}
}
cout<<sum<<endl;
return 0;
}
/*方法二
#include <bits/stdc++.h>
using namespace std;
int main()
{
int days[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};//2022是平年二月份28
int k;
int sum=0;
//第一位(月份的十位。只能取0-1)
for(int i=0;i<=1;i++)//
//第二位(月份的个位。只能取0-1)
for(int j=0;j<=2;j++)//
{
k=j+1;//第三位(日期的十位。)
//第四位(日期的个位。0-9)
for(int m=0;m<=9;m++)
{
int month=i*10+j;//月份
int date=k*10+m;//日期
//判断月份和日期是否合法
if(month<13 && date<=days[month])
{
if(j==i+1 || m==k+1)//"||"前面筛选前面3个单位的可能性,“||”后面筛选后三位的可能性。
{
sum++;
//cout<<"***********"<<endl;
// cout<<month <<','<<date<<endl;
cout<<"*************斜线下面是目标数"<<endl;
}
}
cout<<month <<','<<date<<endl;}
}
cout<<sum<<endl;
return 0;
}
/*运行结果:
0,10
0,11
0,12
0,13
0,14
0,15
0,16
0,17
0,18
0,19
*************斜线下面是目标数
1,20
*************斜线下面是目标数
1,21
*************斜线下面是目标数
1,22
*************斜线下面是目标数
1,23
*************斜线下面是目标数
1,24
*************斜线下面是目标数
1,25
*************斜线下面是目标数
1,26
*************斜线下面是目标数
1,27
*************斜线下面是目标数
1,28
*************斜线下面是目标数
1,29
2,30
2,31
2,32
2,33
2,34
2,35
2,36
2,37
2,38
2,39
10,10
10,11
*************斜线下面是目标数
10,12
10,13
10,14
10,15
10,16
10,17
10,18
10,19
11,20
11,21
11,22
*************斜线下面是目标数
11,23
11,24
11,25
11,26
11,27
11,28
11,29
*************斜线下面是目标数
12,30
*************斜线下面是目标数
12,31
12,32
12,33
12,34
12,35
12,36
12,37
12,38
12,39
14
*/