蓝桥杯C/C++程序设计——日期统计
2023-12-31 16:01:56
问题描述
小蓝现在有一个长度为?100100?的数组,数组中的每个元素的值都在?00?到?99?的范围之内。数组中的元素从左至右如下所示:
现在他想要从这个数组中寻找一些满足以下条件的子序列:
- 子序列的长度为?88;
- 这个子序列可以按照下标顺序组成一个?yyyymmdd?格式的日期,并且要求这个日期是?2023?年中的某一天的日期,例如?20230902,20231223。yyyy 表示年份,mm表示月份,dd表示天数,当月份或者天数的长度只有一位时需要一个前导零补充。
请你帮小蓝计算下按上述条件一共能找到多少个不同的?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; // 返回执行成功
}
?
??
- 定义一个长度为41的整型数组a,存储了一组日期。
- 定义整型变量moth、day和sum,分别用来表示月份、日期和连续出现次数的累积和。
- 定义整型数组month,存储了每个月份的天数。
- 使用嵌套的for循环,遍历每个月份的每一天。
- 对于每一天,使用一个长度为4的整型数组days,用来存储该日期的四位数字表示。
- 将月份和日期的十位和个位数字分别存储到days数组中。
- 使用一个变量k来记录当前已经匹配到的数字个数,初始值为0。
- 遍历数组a,与days中的数字进行逐一比较。
- 如果当前数字与days中对应位置的数字相等,则将k加1。
- 如果k等于4,表示连续的四个数字都已经匹配成功,此时将sum加1,并跳出循环。
- 最后输出sum的值,即日期数组a中连续出现四位数字的次数。
?
#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; // 返回执行成功
}
最后输出四位数字连续出现的总次数,并返回执行成功。
文章来源:https://blog.csdn.net/weixin_66547608/article/details/135315947
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!