蓝桥杯 日期统计(刷题笔记)
问题描述
小蓝现在有一个长度为 100100 的数组,数组中的每个元素的值都在 00 到 99 的范围之内。数组中的元素从左至右如下所示:
5 6 8 6 9 1 6 1 2 4 9 1 9 8 2 3 6 4 7 7 5 9 5 0 3 8 7 5 8 1 5 8 6 1 8 3 0 3 7 9 2 7 0 5 8 8 5 7 0 9 9 1 9 4 4 6 8 6 3 3 8 5 1 6 3 4 6 7 0 7 8 2 7 6 8 9 5 6 5 6 1 4 0 1 0 0 9 4 8 0 9 1 2 8 5 0 2 5 3 3
现在他想要从这个数组中寻找一些满足以下条件的子序列:
- 子序列的长度为 88;
- 这个子序列可以按照下标顺序组成一个 yyyymmddyyyymmdd 格式的日期,并且要求这个日期是 20232023 年中的某一天的日期,例如 2023090220230902,2023122320231223。yyyyyyyy 表示年份,mmmm 表示月份,dddd 表示天数,当月份或者天数的长度只有一位时需要一个前导零补充。
请你帮小蓝计算下按上述条件一共能找到多少个不同的 20232023 年的日期。对于相同的日期你只需要统计一次即可。
代码解释:
#include<bits/stdc++.h>
using namespace std;
int a[100]={5 ,6 ,8 ,6, 9, 1, 6, 1, 2, 4 ,9 ,1 ,9 ,8 ,2 ,3 ,6, 4, 7, 7, 5, 9, 5, 0, 3, 8, 7, 5, 8, 1 ,5 ,8 ,6 ,1 ,8 ,3 ,0 ,3 ,7 ,9 ,2,
7, 0, 5, 8 ,8 ,5 ,7 ,0 ,9 ,9 ,1 ,9 ,4 ,4 ,6, 8, 6 ,3, 3, 8, 5, 1, 6, 3, 4, 6, 7, 0, 7, 8, 2, 7, 6, 8, 9, 5 ,6 ,5 ,6 ,1 ,4 ,0 ,1,
0, 0, 9, 4, 8, 0, 9, 1, 2, 8, 5, 0, 2, 5, 3, 3};
int month[]={0,31,28,31,30,31,30,31,31,30,31,30,31};//记录每个月的天数
int ans=0;//记录结果的多少种情况
int main()
{
for(int i=1;i<=12;i++)//遍历月份
{
for(int j=1;j<=month[i];j++)//遍历每个月的天数
{
int sday[8]={2,0,2,3,i/10,i%10,j/10,j%10};//满足样例2023**月**日
int k=0;//记录子字符串的长度
for(int i=0;i<100;i++)//开始在数组中遍历寻找结果
{
if(a[i]==sday[k])
{
k++;
if(k==8)//当记录的字符串长度达到8时就相当于一种结果
ans++;
}
}
}
}
cout<<ans<<endl;
return 0;
}
结果:235