小蓝现在有一个长度为?100100?的数组,数组中的每个元素的值都在?00?到?99?的范围之内。数组中的元素从左至右如下所示:
现在他想要从这个数组中寻找一些满足以下条件的子序列:
请你帮小蓝计算下按上述条件一共能找到多少个不同的?2023 年的日期。对于相同的日期你只需要统计一次即可。
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
语言 | 最大运行时间 | 最大运行内存 |
---|---|---|
C++ | 1s | 256M |
C | 1s | 256M |
Java | 2s | 256M |
Python3 | 3s | 256M |
PyPy3 | 3s | 256M |
Go | 3s | 256M |
JavaScript | 3s | 256M |
总通过次数: 640??|??总提交次数: 836??|??通过率: 76.6%
难度: 简单???标签: 2023, 暴力, 枚举, 省赛
首先我们观察题目,对题目进行分析,我们要寻找的日期的检索,需要对日期进行遍历循环,然后在一一比较寻找,同时在计数
#include<iostream> // 包含输入输出流库
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<<sum;
return 0; // 返回执行成功
}
?
??
?
#include<iostream> // 包含输入输出流库
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<<sum;
return 0; // 返回执行成功
}
最后输出四位数字连续出现的总次数,并返回执行成功。