问题描述

小蓝现在有一个长度为 100100 的数组,数组中的每个元素的值都在 00 到 99 的范围之内。数组中的元素从左至右如下所示:

现在他想要从这个数组中寻找一些满足以下条件的子序列:

子序列的长度为 88;这个子序列可以按照下标顺序组成一个 yyyymmdd 格式的日期,并且要求这个日期是 2023 年中的某一天的日期,例如 20230902,20231223。yyyy 表示年份,mm表示月份,dd表示天数,当月份或者天数的长度只有一位时需要一个前导零补充。

请你帮小蓝计算下按上述条件一共能找到多少个不同的 2023 年的日期。对于相同的日期你只需要统计一次即可。

答案提交

这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

运行限制

语言最大运行时间最大运行内存C++1s256MC1s256MJava2s256MPython33s256MPyPy33s256MGo3s256MJavaScript3s256M

总通过次数: 640  |  总提交次数: 836  |  通过率: 76.6%

难度: 简单   标签: 2023, 暴力, 枚举, 省赛

解题步骤

首先我们观察题目,对题目进行分析,我们要寻找的日期的检索,需要对日期进行遍历循环,然后在一一比较寻找,同时在计数

#include // 包含输入输出流库

using namespace std; // 使用标准命名空间

int main() // 主函数入口

{

// 定义日期数组a,包含41个元素

int a[41]={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 moth,day; // 定义月份和日期变量

int month[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; // 定义每个月份的天数

int sum=0; // 连续出现四位数字的次数累积和

// 外层循环遍历每个月份

for(int moth=1;moth<=12;moth++)

{

// 内层循环遍历每个月份的每一天

for(int day=1;day<=month[moth];day++)

{

int days[4]; // 定义包含4个整型元素的数组,用于存储日期的四位数字

if(moth<10) // 如果月份小于10

{

days[0]=0; // 数组的第一个元素为0

days[1]=moth; // 数组的第二个元素为当前月份

}

else // 如果月份大于等于10

{

days[0]=1; // 数组的第一个元素为1

days[1]=moth%10; // 数组的第二个元素为月份的个位数

}

if(day<10) // 如果日期小于10

{

days[2]=0; // 数组的第三个元素为0

days[3]=day; // 数组的第四个元素为当前日期

}

else // 如果日期大于等于10

{

days[2]=day/10; // 数组的第三个元素为日期的十位数

days[3]=day%10; // 数组的第四个元素为日期的个位数

}

int k=0; // 记录已匹配的数字个数

// 遍历日期数组a

for(int i=0;i<41;i++)

{

// 检查是否与日期的四位数字连续匹配

if(days[k]==a[i])

{

k++; // 如果匹配成功,则k加1

}

// 如果已连续匹配四位数字,则累积和加1并跳出循环

if(k==4)

{

sum++; // 累积和加1

break; // 跳出循环

}

}

}

}

// 输出四位数字连续出现的总次数

cout<

return 0; // 返回执行成功

}

 

  

定义一个长度为41的整型数组a,存储了一组日期。定义整型变量moth、day和sum,分别用来表示月份、日期和连续出现次数的累积和。定义整型数组month,存储了每个月份的天数。使用嵌套的for循环,遍历每个月份的每一天。对于每一天,使用一个长度为4的整型数组days,用来存储该日期的四位数字表示。将月份和日期的十位和个位数字分别存储到days数组中。使用一个变量k来记录当前已经匹配到的数字个数,初始值为0。遍历数组a,与days中的数字进行逐一比较。如果当前数字与days中对应位置的数字相等,则将k加1。如果k等于4,表示连续的四个数字都已经匹配成功,此时将sum加1,并跳出循环。最后输出sum的值,即日期数组a中连续出现四位数字的次数。

 

#include // 包含输入输出流库

using namespace std; // 使用标准命名空间

int main() // 主函数入口

{

// 定义日期数组a,包含41个元素

int a[41]={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 moth,day; // 定义月份和日期变量

int month[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; // 定义每个月份的天数

int sum=0; // 连续出现四位数字的次数累积和

上面这部分是代码的开头,包括了头文件的引入、命名空间的声明以及主函数的开始。还定义了日期数组a、月份和日期变量、每个月份的天数和连续出现四位数字的次数累积和。

// 外层循环遍历每个月份

for(int moth=1;moth<=12;moth++)

{

// 内层循环遍历每个月份的每一天

for(int day=1;day<=month[moth];day++)

{

int days[4]; // 定义包含4个整型元素的数组,用于存储日期的四位数字

这里是外层和内层的两个for循环,用来遍历每个月份的每一天。在内层循环里定义了一个包含4个整型元素的数组days,用于存储日期的四位数字。

if(moth<10) // 如果月份小于10

{

days[0]=0; // 数组的第一个元素为0

days[1]=moth; // 数组的第二个元素为当前月份

}

else // 如果月份大于等于10

{

days[0]=1; // 数组的第一个元素为1

days[1]=moth%10; // 数组的第二个元素为月份的个位数

}

if(day<10) // 如果日期小于10

{

days[2]=0; // 数组的第三个元素为0

days[3]=day; // 数组的第四个元素为当前日期

}

else // 如果日期大于等于10

{

days[2]=day/10; // 数组的第三个元素为日期的十位数

days[3]=day%10; // 数组的第四个元素为日期的个位数

}

这部分对日期数组的处理,根据月份和日期的大小进行判断,将月份和日期的十位和个位数字分别存储到数组days中。

int k=0; // 记录已匹配的数字个数

// 遍历日期数组a

for(int i=0;i<41;i++)

{

// 检查是否与日期的四位数字连续匹配

if(days[k]==a[i])

{

k++; // 如果匹配成功,则k加1

}

// 如果已连续匹配四位数字,则累积和加1并跳出循环

if(k==4)

{

sum++; // 累积和加1

break; // 跳出循环

}

}

}

}

这里是具体的计算逻辑,通过一个嵌套循环遍历日期数组a,并与days中的数字进行逐一比较,判断是否连续匹配四位数字。

// 输出四位数字连续出现的总次数

cout<

return 0; // 返回执行成功

}

最后输出四位数字连续出现的总次数,并返回执行成功。

好文推荐

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: