2077: [蓝桥杯2023初赛] 日期统计

题目描述

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

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

现在他想要从这个数组中寻找一些满足以下条件的子序列:
1. 子序列的长度为 8;
2. 这个子序列可以按照下标顺序组成一个 yyyymmdd 格式的日期,并且
要求这个日期是 2023 年中的某一天的日期,例如 20230902,20231223。
yyyy 表示年份,mm 表示月份,dd 表示天数,当月份或者天数的长度只有一位时需要一个前导零补充。
请你帮小蓝计算下按上述条件一共能找到多少个不同的 2023 年的日期。
对于相同的日期你只需要统计一次即可。 
本题的结果为一个整数,在提交答案时只输出这个整数,输出多余的内容将无法得分。

代码如下:

#include<iostream>
using namespace std;

int num[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 main() {
	int ans = 0;
	int month[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
	int visit[13][32] = {0}; 
	
	for (int y1 = 0; y1 < 100; y1 ++) {
		if (num[y1] == 2) {
			for (int y2 = y1 + 1; y2 < 100; y2 ++) {
				if (num[y2] == 0) {
					for (int y3 = y2 + 1; y3 < 100; y3 ++) {
						if (num[y3] == 2) {
							for (int y4 = y3 + 1; y4 < 100; y4 ++) {
								if (num[y4] == 3) {
									for (int m1 = y4 + 1; m1 < 100; m1 ++) {
										if (num[m1]<= 1) {
											for (int m2 = m1 + 1; m2 < 100; m2 ++) {
												int m = num[m1] * 10 + num[m2];
												
												if (m >= 1 && m <= 12) {
													for (int d1 = m2 + 1; d1 < 100; d1 ++) {
														if (num[d1] <= 3) {
															for (int d2 = d1 + 1; d2 < 100; d2 ++) {
																int d = num[d1] * 10 + num[d2];
																
																if (d > 0 && d <= month[m - 1] && visit[m][d] == 0) {
																	ans++;
																	visit[m][d] = 1;
																}
															}
														}
													}
												}
											}
										}
									}
								}
							}
						}
					}
				}
			}
		}
	}
	
	cout << ans;
	
	return 0;
}

最后答案是235.

  • 8
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值