【练习题】顺子日期

 【题目描述】

小明特别喜欢顺子。顺子指的就是连续的三个数字: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

*/

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值