2023年第14届蓝桥杯大赛软件赛省赛 C/C++ 大学 B 组 试题 A: 日期统计(5)

在这里插入图片描述

首先理解子序列 "子序列"(subsequence)是指从数组 arr 中选取一组元素,这些元素在原数组中的相对顺序保持不变,但不一定要连续。
换句话说,一个子序列是通过从原数组中删除一些元素(或者不删除任何元素)后得到的序列。对于寻找满足条件的日期来说,
我们是在查找一组特定的数字,这些数字按照 yyyymmdd 的格式排列,它们在原数组 arr 中的出现顺序与在实际日期中的顺序相同,
但这些数字在数组中可以是分散的。
#include<iostream>
using namespace std;
const int N=1e2+10;
int a[N]={0,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 day[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int main(){
	int ans=0;
	for(int i=1;i<=12;i++){
		for(int j=1;j<=day[i];j++){
			int date[]={0,2,0,2,3,i/10,i%10,j / 10,j % 10};
			int id=1;
			for(int k=1; k<=100;k++){
				if(a[k] == date[id]){
					id++;
					if(id > 8){
						ans++;
						break;
					}
				}
			}
		}
	}
	cout<<ans<<endl;
	return 0;
}

在这里插入图片描述

代码的逻辑是这样的:

首先,设置了一个常量大小的数组 a,用来存放一个特定的数字序列。此数组大小稍大于100,以确保可以容纳所有元素。

设置了一个数组 day,包含了非闰年每个月的天数。

程序进入主函数 main(),初始化计数器 ans 来追踪找到的匹配日期数量。

通过一个双重循环遍历所有可能的月份(112月)和每个月的日期。

对于每一个日期,构建了一个表示该日期的数组 date,其格式为 {0,2,0,2,3,月的十位,月的个位,日的十位,日的个位}。这代表了日期“2023年MM月DD日”。

接着,程序遍历数组 a,尝试找到一个序列,该序列与 date 数组中代表当前日期的数字序列匹配。

如果在 a 中找到一个匹配的数字,则 id(跟踪 date 数组的当前位置)递增。如果 id 超过8(即找到完整的日期格式匹配),就增加 ans 计数器的值,并跳出当前循环。

在遍历了所有的日期后,打印出找到的匹配日期的数量 ans。

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值