日期统计(蓝桥杯)

文章目录

  • 日期统计
    • 问题描述
    • 答案:235
    • 回溯算法
    • 暴力枚举

日期统计

问题描述

小蓝现在有一个长度为 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 年的日期。对于相同的日期你只需要统计一次即可。

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

答案:235

回溯算法

这段代码实现了一个基于回溯算法的日期统计问题。下面我将对代码进行详细注释。

// 包含常用库文件和命名空间
#include<bits/stdc++.h>
using namespace std;// ans 用来记录符合条件日期的总数
int ans=0;
// path 用来保存当前正在尝试的日期序列
vector<int> path;
// month 数组用来记录每个月的天数,注意索引0是一个哑元素,从1开始代表1月
int month[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};// 回溯函数,用于生成所有可能的日期序列
void backstracking(int a[],int start)
{// 如果路径长度为8,即已经找到一个完整的日期序列if(path.size()==8){// 检查序列是否以2023年开头if(path[0]==2&&path[1]==0&&path[2]==2&&path[3]==3){// 从序列中提取出月份int mm=path[4]*10+path[5];// 检查月份是否在1到12之间if(mm>=1&&mm<=12){// 从序列中提取出日期int dd=path[6]*10+path[7];// 检查日期是否在该月可能的日期范围内if(dd>=1&&dd<=month[mm]){// 如果日期合法,计数器加1ans++;}}}// 完整的日期序列已经生成,无需进一步递归,因此返回return ;}// 使用set来避免同一层使用重复的数字unordered_set<int> used;// 从start位置开始遍历数组for(int i=start;i<100;i++){// 如果当前数字已经在本层使用过,跳过if(used.find(a[i])!=used.end())continue;// 将当前数字加入到used集合中,表示本层已使用used.insert(a[i]);// 将当前数字加入到path中path.push_back(a[i]);// 递归调用回溯函数,从下一个位置开始backstracking(a,i+1);// 回溯,从path中移除当前数字path.pop_back();}
}int main()
{// 初始化数组a,包含100个0到9的数字int a[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};// 从数组第0个位置开始回溯backstracking(a,0);// 输出找到的符合条件的日期总数cout<<ans;return 0;
}

这段代码通过深度优先搜索的回溯方法,尝试所有可能的8位数日期序列,并检查它们是否符合条件。每当找到一个有效的日期时,会将计数器ans增加1。最后,程序输出这个计数器,即符合条件的日期数量。

暴力枚举

此段代码的目的是从一个固定的、包含100个0到9数字的数组中寻找所有符合特定日期格式(即2023年的有效日期)的子序列,并统计这些不同有效日期的数量。以下为详细注释:

// 包含常用的头文件和使用标准命名空间
#include<bits/stdc++.h>
using namespace std;// 定义month数组,用于存储各月的天数,考虑到不是闰年,所以二月是28天
int month[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; // 索引0是占位符
int months[13]; // 用于标记某年某月是否已经被使用int main()
{// a数组包含了100个数字,代表原题中给出的数列int a[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};// 使用set集合res来存储不同的日期,利用集合的特性自动去重set<int> res;// 以下循环结构嵌套层层筛选符合条件的子序列// 第一层循环,从第一个数字开始,寻找'2',代表年份的千位for(int i=0;i<100-7;i++) // 保证后面有足够的数字组成完整日期{if(a[i]==2){// 第二层循环,寻找'0',代表年份的百位for(int j=i+1;j<100-6;j++){if(a[j]==0){// 第三层循环,寻找'2',代表年份的十位for(int k=j+1;k<100-5;k++){if(a[k]==2){// 第四层循环,寻找'3',代表年份的个位for(int l=k+1;l<100-4;l++){if(a[l]==3){// 第五层循环,寻找小于'2'的数,代表月份的十位for(int o=l+1;o<100-3;o++){if(a[o]<2){// 第六层循环,寻找月份的个位for(int p=o+1;p<100-2;p++){// 组成月份并检查是否合法int mm=a[o]*10+a[p];if(mm>=1&&mm<=12&&months[mm]==0){// 标记该月份已被使用months[mm]=1;// 第七层循环,寻找天数的十位for(int t=p+1;t<100-1;t++){if(a[t]<4){// 第八层循环,寻找天数的个位for(int y=t+1;y<100;y++){// 组成天数并检查是否合法int dd=a[t]*10+a[y];if(dd>=1&&dd<=month[mm]){// 将合法的日期加入集合中res.insert(mm*100+dd);}}}}}}}}}}}}}}}}// 输出不同有效日期的数量cout<<res.size();return 0;
}

这段代码使用了八层嵌套循环来穷举所有可能的日期,每一层循环都是在寻找日期的下一位数字。它使用了一个set来保存所有合法的日期,这样可以自动处理重复日期的问题。程序最终输出了这个集合的大小,即有效日期的总数。注意,程序中的months数组用来标记2023年的每个月是否已经被检查过。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/813894.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【2024年5月备考新增】《软考真题分章练习(含答案解析) - 17 管理科学-运筹学基础 (1)》

管理科学-运筹学基础 1、小李作为项目经理需要从以下四个项目方案中选择项目,已知项目周期均为 2 年且期初投资额都是30.000 元,折现均为 10%。项目情况如下: 方案 A:第一年现金流为 14,000 元,第二年现金流 19,000 元 方案 B:第一年现金流为 23,000 元,第二年现金流…

rust学习笔记

一、常用trait Clone&Copy pub trait Clone: Sized {fn clone(&self) -> Self; }pub trait Copy: Clone { } Clone Copy let y x;let y x.clone();发生移动编译报错√发生移动发生拷贝√√发生拷贝发生拷贝 Clone&#xff1a;可以理解为深拷贝&#xff0c;例如…

【前端】layui table表格勾选事件,以及常见模块

欢迎来到《小5讲堂》&#xff0c;大家好&#xff0c;我是全栈小5。 这是《前端》系列文章&#xff0c;每篇文章将以博主理解的角度展开讲解&#xff0c; 温馨提示&#xff1a;博主能力有限&#xff0c;理解水平有限&#xff0c;若有不对之处望指正&#xff01; 目录 表格勾选事…

java基础-chapter16(动态代理)

动态代理 特点&#xff1a;无侵入式的给代码增加额外的功能 在Java中&#xff0c;动态代理是一种在运行时动态生成代理对象的机制&#xff0c;而不需要在编译时确定代理类。它允许在运行时创建一个实现了一组特定接口的代理类&#xff0c;这些代理类可以将方法调用转发到实际…

面试-数据库基础以及MySql、ClickHost、Redis简介

面试-数据库基础以及MySql、ClickHost、Redis简介 0.数据完整性1.数据库并发控制1.1事物1.2 并发读写错误1.3 锁1.3.1 乐观锁与悲观锁1.3.2 共享锁和排他锁1.3.3 行锁与表锁1.3.4 意向锁 1.4 封锁协议与隔离级别1.5 MVCC1.5.1 概念1.5.2 当前读与快照读1.5.3 MVCC in InnoDB 2.…

pytest常用钩子函数

1、什么叫钩子函数 在Pytest框架中&#xff0c;钩子函数是一种允许用户扩展或者自定义测试执行过程的机制。钩子函数允许用户在测试的不同阶段插入自定义的代码&#xff0c;以实现特定的行为&#xff0c;操作或处理。这种插入式的机制使得Pytest具有高度的灵活性和扩展性。 如…

Linux软件包管理器yum—5

一、Linux下软件安装的方式 ①源代码安装&#xff1a; ②rmp包安装&#xff1a; 本质是拷贝可执行程序到系统目录下。 ③yum一键下载&#xff0c;安装&#xff0c;卸载。相当于手机的应用商店。 二、yum 2.1查看yum已配置的源&#xff1a; ls /etc/yum.repos.d/ 2.2查看yum…

环信 IM 客户端将适配鸿蒙 HarmonyOS

自华为推出了自主研发操作系统鸿蒙 HarmonyOS 后&#xff0c;国内许多应用软件开始陆续全面兼容和接入鸿蒙操作系统。环信 IM 客户端计划将全面适配统鸿蒙 HarmonyOS &#xff0c;助力开发者快速实现社交娱乐、语聊房、在线教育、智能硬件、社交电商、在线金融、线上医疗等广泛…

HarmonyOS实战开发-横竖屏切换

介绍 本实例展示如何使用媒体查询&#xff0c;通过ohos.mediaquery 接口完成在不同设备上显示不同的界面效果。 效果预览 使用说明 1.在竖屏设备上&#xff0c;首页展示新闻列表&#xff0c;点击新闻进入详情界面。 2.在横屏设备上&#xff0c;首页左侧展示新闻列表&#x…

010、Python+fastapi,第一个后台管理项目走向第10步:ubutun 20.04下安装ngnix+mysql8+redis5环境

一、说明 先吐槽一下&#xff0c;ubuntu 界面还是不习惯&#xff0c;而且用的是云电脑&#xff0c;有些快捷键不好用&#xff0c;只能将就&#xff0c;谁叫我们穷呢&#xff1f; 正在思考怎么往后进行&#xff0c;突然发现没安装mysql 和redis&#xff0c;准备安装&#xff0…

系统架构最佳实践 -- 高并发解决单用户超领优惠券问题

问题抛出 在近期的项目里面有一个功能是领取优惠券的功能&#xff0c; 问题描述&#xff1a; 每一个优惠券一共发行多少张&#xff0c;每个用户可以领取多少张&#xff1a; 如&#xff1a;A优惠券一共发行120张&#xff0c;每一个用户可以领取140张&#xff0c;当一个用户领…

网桥的原理

网桥的原理 1.1 桥接的概念 简单来说&#xff0c;桥接就是把一台机器上的若干个网络接口“连接”起来。其结果是&#xff0c;其中一个网口收到的报文会被复制给其他网口并发送出去。以使得网口之间的报文能够互相转发。 交换机就是这样一个设备&#xff0c;它有若干个网口…

【13137】质量管理(一)2024年4月串讲题组一

目录 1.选择题 2.多选题 3.简答题 4.论述题 5.计算题 6.论述题 【13137】质量管理-速 记 宝 典【全国通用】</

5.0 HDFS 集群

5.0 HDFS 集群 分类 编程 HDFS 集群是建立在 Hadoop 集群之上的&#xff0c;由于 HDFS 是 Hadoop 最主要的守护进程&#xff0c;所以 HDFS 集群的配置过程是 Hadoop 集群配置过程的代表。 使用 Docker 可以更加方便地、高效地构建出一个集群环境。 每台计算机中的配置 Hado…

2024最新数据分级分类的架构方法流程指南(附下载)

以下是资料目录&#xff0c;如需下载请前往知识星球下载&#xff1a;https://t.zsxq.com/18KTZnJMX

爬虫ip被限制了怎么解决

在新手开发爬虫功能的时候&#xff0c;很容易出现单个ip被冻结事件。 What: 最简单的表现就是拿不到相应的数据流。 Why: ip被冻结是什么原因 How: 肯定就是网上提供的一些比较基础的方法&#xff0c;分分钟就可以上手。 user_agent 伪装和轮换 不同浏览器的不同版本都有不…

中药分类大全数据库|(收载CDE数据及中药注册分类数据)

中药是指根据中医药理论和实践经验&#xff0c;用以预防、治疗和诊断疾病以及调节机体功能的药材和成药。像中药材、中药饮片、中成药、方剂、药材提取物、配方颗粒、外用中药、特殊用途中药等都可以统称为中药&#xff0c;所以说中药的分类方法多种多样&#xff0c;笔者精心整…

【Canvas与艺术】绘制黄色三角生化危险标志

【关键点】 系统函数arcTo函数的用法及自编函数createRegTriArr的灵活运用。 【成果图】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head>&…

【STL】vector

目录 1. vector的使用 1.1 vector的定义 1.2 vector iterator 的使用 1.3 vector 空间增长问题 1.4 vector 增删查改 1.5 vector 迭代器失效问题&#xff08;重点&#xff09; 2.vector模拟实现 1. vector的使用 1.1 vector的定义 1.2 vector iterator 的使用 1.3 vecto…

Java代码基础算法练习-自定义函数之求字符串长度-2024.04.13

任务描述&#xff1a; 写一函数&#xff0c;求一个字符串的长度&#xff08;字符串长度不超过255&#xff09;&#xff0c;然后在主函数中调用该函数 实现求长度操作。 任务要求&#xff1a; 代码示例&#xff1a; package April_2024;import java.util.Scanner;public class …